數據表是這樣的
select * from water_level_records m where ( select count(*) from water_level_records n where m.device_id = n.device_id and m.record_time < n.record_time ) < 1
這個sql的邏輯是把一個表當做兩個表關聯來使用,當滿足m的記錄時間小於n的記錄時間的數量<1 即只有一個相等時返回,即是時間的最大值, 如果為<2 則是為前兩大的值,這里以device_id為唯一關聯
一種更搞笑的方法如下
SELECT DISTINCT on (device_id ) device_id ,record_time from water_level_records order by device_id , record_time desc
這里DISTINCT on的用法和效果與DISTINCT不同,如果這里為DISTINCT 則 device_id record_tiem 這兩列有一列不同就滿足唯一性。而distinct on的效果為不管后面跟了幾列,必須保持device_id的唯一性
這里加上order by record_time desc 的效果為只取時間最大的一項。另注意DISTINCT on (device_id ) 如果加order by 的話 order by device_id必填