使用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中文網其他相關文章!