sql 實現取表中相同id時間最大的一行 利用distinct on


數據表是這樣的

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必填


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM