使用GROUP BY
和MAX(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中文网其他相关文章!