当前位置: 首页 > 面试题库 >

检索每个用户的最新条目

张宝
2023-03-14
问题内容

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

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是返回的那一行。

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


问题答案:

该查询称为逐组最大值,它(至少在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上看到它。



 类似资料:
  • 问题内容: 我有此数据: 代码(对于SQL Server 2005): 我想为每个名称获取具有最新DATE的ID。像这样: 实现此目的最优雅的方法是什么? 问题答案: 尽量避免使用保留字(和模糊的列名),例如…

  • 问题内容: 我在Postgres 9.2中有以下用于用户消息(简化形式)的日志表: 每个用户每天最多包含一条记录。在300天之内,每天大约有50万条记录。每个用户的有效负载都在增加(如果很重要)。 我想有效地检索每个用户在特定日期之前的最新记录。我的查询是: 这非常慢。我也尝试过: 具有相同的计划,并且速度同样慢。 到目前为止,我在上只有一个索引,但并没有太大帮助。 我有一个包含所有用户的表。我还

  • 问题内容: 可以说我有2个表:blog_posts和类别。每个博客帖子仅属于一个类别,因此此处的两个表之间基本上有一个外键。 我想从每个类别中检索2个最新的帖子,是否可以在单个请求中实现?GROUP BY会将所有内容分组,而在每个类别中只剩下一行。但我要其中两个。 执行1 + N查询(N =类别数)会很容易。首先检索类别。然后从每个类别检索2个帖子。 我相信执行M个查询(M =我希望从每个类别获得

  • 问题内容: 有一个包含数据的表,如下所示: 如果我运行查询,我将得到的结果为: 什么查询将返回以下结果? 即,应返回每个组中的最后一条记录。 目前,这是我使用的查询: 但这看起来效率很低。还有其他方法可以达到相同的结果吗? 问题答案: MySQL 8.0现在支持窗口功能,就像几乎所有流行的SQL实现一样。使用这种标准语法,我们可以编写每组最多n个查询: 以下是我在2009年为此问题写的原始答案:

  • 我正在尝试使用Altova XMLSpy和XQuery1.0为每个客户返回最近的订单。 在SQL中,查询如下所示: 它返回16行,但我无法获得类似于XQuery中的工作。 我尝试了多种不同的代码,我认为我得到的最接近的代码是: 对于XML从MS Access导出的糟糕的标记名表示歉意。 请救命!提前道谢。 编辑:在尝试JoeMFB的解决方案后,当我只需要最近的(或最大日期)时,我会收到每个客户的所

  • 问题内容: 我在Oracle数据库中有下表 现在,我想检索每个ID的最新值(及其时间)。输出示例: 我只是不知道如何将其放入查询… 此外,以下选项将是不错的选择: 选项1:查询应仅返回最近XX分钟的值。 选项2:应将id与另一个具有id和idname的表中的文本连接起来。id的输出应类似于:id-idname(例如1-testid1)。 非常感谢您的帮助! 问题答案: 给定此数据… …以下查询给出