首頁 > 資料庫 > mysql教程 > 如何使用 SQL 的「GROUP BY」和「MAX(DATE)」來取得每趟列車的最新目的地?

如何使用 SQL 的「GROUP BY」和「MAX(DATE)」來取得每趟列車的最新目的地?

Mary-Kate Olsen
發布: 2025-01-22 07:37:11
原創
597 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板