首页 >数据库 >mysql教程 >如何使用 SQL 的'GROUP BY”和'MAX(DATE)”获取每趟列车的最新目的地?

如何使用 SQL 的'GROUP BY”和'MAX(DATE)”获取每趟列车的最新目的地?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-22 07:37:11634浏览

How to Get the Latest Destination for Each Train Using SQL's `GROUP BY` and `MAX(DATE)`?

使用GROUP BYMAX(DATE)的SQL查询[重复问题]

问题:

从给定表中,根据最大的出发时间获取每列火车的最新目的地。期望的输出结果应排除重复的目的地,同时保留最新的时间。

示例数据:

<code>火车    目的地      时间
1        HK        10:00
1        SH        12:00
1        SZ        14:00
2        HK        13:00
2        SH        09:00
2        SZ        07:00</code>

期望结果:

<code>火车    目的地      时间
1        SZ        14:00
2        HK        13:00</code>

初始尝试:

使用简单的GROUP BY查询和MAX(Time):

<code class="language-sql">SELECT Train, Dest, MAX(Time)
FROM TrainTable
GROUP BY Train</code>

错误:

该查询导致错误“ora-00979 not a GROUP BY expression”,表明Dest列也必须包含在GROUP BY语句中。但是,这将导致每列火车出现重复的目的地。

解决方案:

为了达到期望的结果,可以使用更复杂的查询:

<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>

此查询首先使用RANK函数根据出发时间的降序计算每列火车每个目的地的排名。PARTITION BY train子句确保在每列火车组内执行排名。最后,查询仅检索dest_rank等于1的记录,有效地过滤掉重复的目的地,并仅保留每列火车的最新目的地。

以上是如何使用 SQL 的'GROUP BY”和'MAX(DATE)”获取每趟列车的最新目的地?的详细内容。更多信息请关注PHP中文网其他相关文章!

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