为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MYYA 2019-05-23 13:15:35
检索每个组中的最后一条记录 - 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

这样,您可以避免子查询中的相关子查询和/或排序,这些子查询往往非常慢/效率低。


查看完整回答
反对 回复 2019-05-23
  • 3 回答
  • 0 关注
  • 1022 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信