比如說有表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你就明白了吧,當然肯定還有其他寫法,這只是我這一刻想到的分享出來了, 大家如果有其他做法希望可以與我分享一下。
如有問題,望指教。