小编典典

检索每个用户的最新条目

sql

如果我有一个具有以下结构和数据的表:

id | user_id | created_at
-------------------------
 1 |       7 |    0091942
 2 |       3 |    0000014
 3 |       6 |    0000890
 4 |       6 |    0029249
 5 |       7 |    0000049
 6 |       3 |    0005440
 7 |       9 |    0010108

我将使用哪种查询来获得以下结果(随后的说明):

id | user_id | created_at
-------------------------
 1 |       7 |    0091942
 6 |       3 |    0005440
 4 |       6 |    0029249
 7 |       9 |    0010108

如你看到的:

  • 每个user_id仅返回一行。
  • 最高的那一行created_at是返回的那一行。

是否有一种 无需 使用子查询即可完成此操作的方法?该程序经过的关系代数术语中是否有名称?


阅读 177

收藏
2021-04-28

共1个答案

小编典典

该查询称为逐组最大值,它(至少在MySQL中)可以通过子查询实现。例如:

SELECT my_table.* FROM my_table NATURAL JOIN (
  SELECT   user_id, MAX(created_at) created_at
  FROM     my_table
  GROUP BY user_id
) t

sqlfiddle上看到它。

2021-04-28