2016/10/23

[SQL] 取得分群 (Group by) 後,最新(大) / 最舊(小) 值

有時在操作 SQL 時,會遇到資料分群 (Group By) 後,取得每個群組最大 (新) 的項目。這裡參考了 Stack overflow 上一些解決方法。主要的概念都須用到子查詢,並在子查詢的操作過程中動一些小手段。

方法一:先利用 Group By 取得 Max 值後,在 Join 原表
SELECT t.Train, t.Dest, r.MaxTime
FROM (
      SELECT Train, MAX(Time) as MaxTime
      FROM TrainTable
      GROUP BY Train
) r
INNER JOIN TrainTable t
ON t.Train = r.Train AND t.Time = r.MaxTime

方法二:替子查詢內容 Group By 並添加流水號,再透過主查詢將需要的內容取出來
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

個人比較偏好方法二,簡潔有力呀!

參考來源:GROUP BY with MAX(DATE)


沒有留言 :

張貼留言

注意:只有此網誌的成員可以留言。