zoukankan      html  css  js  c++  java
  • group by分组后获得每组中时间最大的那条记录

    用途:
    GROUP BY 语句用于 对一个或多个列对结果集进行分组。

    原表: t_iov_help_feedback

    现在,我们希望根据USER_ID 字段进行分组,那么,可使用 GROUP BY 语句。

    SELECT
      ID,
      USER_ID,
      problems,
      last_updated_date
    FROM
      t_iov_help_feedback
    GROUP BY
      USER_ID;

    
    

     结果:

    可以看到上面的,结果的确是根据 USER_ID 进行分组了,但是返回的记录是 USER_ID 对应的每组 中最小的那条记录。也就是ID最小的那条。现在我想分组后得到,last_updated_date 最大的那条记录。这怎么实现呢?

    很简单,直接查询的表默认是以 ID 进行顺序排序的,因为分组的时候取的是每组中的第一条。所以只需要 使查询的表 按照 last_updated_date倒叙排序就行了。

    实现的SQL如下,这里使用了嵌套查询。

    SELECT
      ID,
      USER_ID,
      problems,
      last_updated_date
    FROM
      ( SELECT * FROM t_iov_help_feedback ORDER BY LAST_UPDATED_DATE DESC ) b
    GROUP BY
      b.USER_ID;

    其中:select * from t_iov_help_feedback  order by  LAST_UPDATED_DATE DESC 就相当于一个按照 last_updated_date

    倒叙排序的表了。现在取的就是每组中时间最大的那条记录了。

    当遇到两个不同的表时,可以使用以下SQL:

    SELECT
      a.title,
      t.NAME,
      t.price
    FROM
      a
      INNER JOIN ( SELECT * FROM b ORDER BY id, price ) t ON t.id = a.b_id
    GROUP BY
      a.b_id;

    注:mysql5.7的版本 需要在order by 后面加上limit限制

    转载:https://blog.csdn.net/u012660464/article/details/78605078

  • 相关阅读:
    背包系列 hdu3449 有依赖背包
    背包系列 hdu 3535 分组背包
    屏蔽scrollview的滚动
    高精度算法代码
    输入法出现时,中间固定,底部上移的代码
    排序之分治排序
    排序之双向冒泡排序
    Miller Rabin 大素数测试
    来聊聊WWDC 苹果大会上的那些黑科技
    不想成为好leader的程序猿不是好攻城狮
  • 原文地址:https://www.cnblogs.com/CincentHuang/p/12376236.html
Copyright © 2011-2022 走看看