mysql group by max取得同一行其他資料


最近在本身已經有使用join的語句碰到這件事,就查了有沒有什麼方法不用搜兩層來處理,沒想到真的有大神想出方法而且處理速度上還比兩層快,這邊做個紀錄。

一般用法

一般來說就是先抓出唯一值然後使用Join處理

SELECT
   s.video_id
   ,s.video_category
   ,s.video_url
   ,s.video_date
   ,s.video_title
   ,s.short_description
FROM videos s
   JOIN (SELECT MAX(video_id) AS id FROM videos GROUP BY video_category) max
      ON s.video_id = max.id

大神作法

參考資料的範例中有人使用合併值來處理,在部分情況就可以跳過JOIN增加效率,只要MAX的部分能轉成數字排列都能這樣使用,下方範例是我用來抓最後更新時間資料的id。

-- 將排序的時間轉成數字 MAX取出後再使用SUBSTRING切掉
SUBSTRING(MAX(CONCAT(unix_timestamp(date), LPAD(id, 11, '0'))), 11) AS showid

取出後使用取代處理左方的0或是把此欄位轉為int就可以去除多餘的0

參考資料

https://stackoverflow.com/questions/6807854/sql-query-to-get-column-values-that-correspond-with-max-value-of-another-column

Tags : mysql