zoukankan      html  css  js  c++  java
  • 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你就明白了吧,当然肯定还有其他写法,这只是我这一刻想到的分享出来了, 大家如果有其他做法希望可以与我分享一下。

    如有问题,望指教。

  • 相关阅读:
    WPF 使用 Direct2D1 画图 绘制基本图形
    WPF 使用 Direct2D1 画图 绘制基本图形
    dot net core 使用 IPC 进程通信
    dot net core 使用 IPC 进程通信
    win2d 图片水印
    win2d 图片水印
    Java实现 LeetCode 240 搜索二维矩阵 II(二)
    PHP closedir() 函数
    PHP chroot() 函数
    PHP chdir() 函数
  • 原文地址:https://www.cnblogs.com/WNof11020520/p/8697205.html
Copyright © 2011-2022 走看看