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