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

    如有问题,望指教。

  • 相关阅读:
    计数问题
    自定义中间件
    中间件的数据流向
    模块化
    开发属于自己的包
    中间件
    java JDK环境变量配置
    uni-app 请求 uni.request封装使用
    uni-app 自定义 简单 底部tab
    vue 过滤器 filter 的使用
  • 原文地址:https://www.cnblogs.com/WNof11020520/p/8697205.html
Copyright © 2011-2022 走看看