2.(groupby)如何让分组后,每组中的数据按时间倒序排列
(groupby和order。。。
⽐如说有表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.idgroupby分组
结果:
结果是按device_id分组了,可是组⾥⾯的数据没有按ts字段从⼤到⼩的排列,
所这样的sql还是没达到⽬的,
最终正确的写法:接下来正确的来了:select * from devicedata order by device_id, ts desc
结果:
这样就可以达到⽬的了,没想到吧,
通过order by device_id, ts desc 我们可以将查询结果先按device_id分组,再将每⼀组⾥⾯的按照ts字段降序(或升序)排列。
看这条sql你就明⽩了吧,当然肯定还有其他写法,这只是我这⼀刻想到的分享出来了,⼤家如果有其他做法希望可以与我分享⼀下。如有问题,望指教。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论