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