2.(group by)如何让分组后,每组中的数据按时间倒序排列(group by和 order by的分组按排列) | 您所在的位置:网站首页 › desc降序是从大到小吗 › 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你就明白了吧,当然肯定还有其他写法,这只是我这一刻想到的分享出来了, 大家如果有其他做法希望可以与我分享一下。 如有问题,望指教。
|
CopyRight 2018-2019 实验室设备网 版权所有 |