首頁 > 資料庫 > mysql教程 > 如何使用 SQL 的 GROUP BY 和 MAX(DATE) 檢索每個群組的最新記錄?

如何使用 SQL 的 GROUP BY 和 MAX(DATE) 檢索每個群組的最新記錄?

Barbara Streisand
發布: 2025-01-22 07:22:08
原創
341 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板