檢索每個組中的最后一條記錄 - MySQL有一個表messages包含如下所示的數據:Id Name Other_Columns-------------------------1 A A_data_12 A A_data_23 A A_data_34 B B_data_15 B B_data_26 C C_data_1如果我運行查詢select * from messages group by name,我會得到如下結果:1 A A_data_14 B B_data_16 C C_data_1什么查詢將返回以下結果?3 A A_data_35 B B_data_26 C C_data_1也就是說,應返回每組中的最后一條記錄。目前,這是我使用的查詢:SELECT *FROM (SELECT *FROM messagesORDER BY id DESC) AS xGROUP BY name但這看起來非常低效。還有其他方法可以達到相同的效果嗎?
3 回答

慕森王
TA貢獻1777條經驗 獲得超3個贊
使用子查詢返回正確的分組,因為你已經到了一半。
試試這個:
select a.*from messages a inner join (select name, max(id) as maxid from messages group by name) as b on a.id = b.maxid
如果不是id
你想要的最大值:
select a.*from messages a inner join (select name, max(other_col) as other_col from messages group by name) as b on a.name = b.name and a.other_col = b.other_col
這樣,您可以避免子查詢中的相關子查詢和/或排序,這些子查詢往往非常慢/效率低。
添加回答
舉報
0/150
提交
取消