2.(group by)如何讓分組后,每組中的數據按時間倒序排列(group by和 order by的分組按排列)


 

 

比如說有表devicedata:

問題: 現在我想將devicedata這個表中的數據,先按device_id這個字段分組,然后每組中的數據按時間字段ts從大到小的排列, 如何解決呢?

錯誤的sql:首先分組,然后order by 排序, select * from devicedata GROUP BY device_id, id ORDER BY ts DESC,

但是這條sql查詢得到的結果是:

結果是不僅沒排序,而且也沒分組。

再嘗試一下:用子查詢 先用order by將數據排序 然后將結果用group by分組,

select * from (select * from devicedata ORDER BY ts DESC) a GROUP BY a.device_id, a.id

結果:

結果是按device_id分組了, 可是組里面的數據沒有按ts字段從大到小的排列,

所這樣的sql還是沒達到目的, 

最終正確的寫法: 接下來正確的來了:select * from devicedata order by device_id, ts desc

結果:

這樣就可以達到目的了,沒想到吧,

 通過order by device_id, ts desc 我們可以將查詢結果先按device_id分組, 再將每一組里面的按照ts字段降序(或升序)排列。

看這條sql你就明白了吧,當然肯定還有其他寫法,這只是我這一刻想到的分享出來了, 大家如果有其他做法希望可以與我分享一下。

如有問題,望指教。

 


免責聲明!

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



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