首页 >数据库 >mysql教程 >如何使用 SQL 的 GROUP BY 和 MAX(DATE) 检索每个组的最新记录?

如何使用 SQL 的 GROUP BY 和 MAX(DATE) 检索每个组的最新记录?

Barbara Streisand
Barbara Streisand原创
2025-01-22 07:22:08316浏览

How to Retrieve the Latest Record for Each Group Using SQL's GROUP BY and MAX(DATE)?

使用GROUP BY和MAX(DATE)进行分组[重复]

在SQL中,您可能会遇到需要根据特定列提取最新记录并按另一列分组的情况。例如,您可能需要确定表中每列火车的最新目的地。

按MAX(Time)分组

最初,您尝试使用简单的GROUP BY语句和MAX(Time)来实现此目的,但这导致错误。这是因为您不能在GROUP BY语句中聚合非分组列。要解决此问题,您必须在group by语句中包含'Dest'。但是,这不会产生预期的结果。

使用子查询和RANK函数

解决方案涉及使用子查询和RANK()函数。子查询创建一个中间表,该表根据出发时间计算每个目的地的排名。RANK()函数根据时间分配排名,对于每列火车,最大值(最新时间)的排名为1。

最终查询从子查询中选择火车、目的地和时间,其中dest_rank为1。这确保只提取每列火车的最新目的地。

以下是更新后的SQL查询:

<code class="language-sql">SELECT train, dest, time
FROM (
  SELECT train, dest, time,
    RANK() OVER (PARTITION BY train ORDER BY time DESC) dest_rank
    FROM traintable
  )
where dest_rank = 1;</code>

此查询将产生所需的结果:

火车 目的地 时间
1 SZ 14:00
2 HK 13:00

以上是如何使用 SQL 的 GROUP BY 和 MAX(DATE) 检索每个组的最新记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn