首页 > 技术文章 > group by分组后获得每组中时间最大的那条记录

CincentHuang 2020-02-28 10:58 原文

用途:
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

推荐阅读