检索每个组中的最后一条记录 - 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
提交
取消