检索每个组中的最后一条记录 - MySQL

检索每个组中的最后一条记录 - MySQL

有一个表messages包含如下所示的数据:


Id   Name   Other_Columns

-------------------------

1    A       A_data_1

2    A       A_data_2

3    A       A_data_3

4    B       B_data_1

5    B       B_data_2

6    C       C_data_1

如果我运行查询select * from messages group by name,我会得到如下结果:


1    A       A_data_1

4    B       B_data_1

6    C       C_data_1

什么查询将返回以下结果?


3    A       A_data_3

5    B       B_data_2

6    C       C_data_1

也就是说,应返回每组中的最后一条记录。


目前,这是我使用的查询:


SELECT

  *

FROM (SELECT

  *

FROM messages

ORDER BY id DESC) AS x

GROUP BY name

但这看起来非常低效。还有其他方法可以达到相同的效果吗?


MYYA
浏览 1023回答 3
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这样,您可以避免子查询中的相关子查询和/或排序,这些子查询往往非常慢/效率低。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL