繁体   English   中英

MySQL查询从每组涉及2列获取最后一条记录

[英]MySQL query to fetch last record from each group involving 2 columns

我正在编写一个MySQL(MariaDB)查询来获取用户已收到消息的发件人列表。 就像在Facebook收件箱中一样,我希望最近的发件人首先出现,我已经通过以下查询:

SELECT  DISTINCT user_id_s
    FROM  messages
    WHERE  id IN (
        SELECT  MAX(id)
            FROM  messages
            WHERE  user_id_r=390
            GROUP BY  user_id_s
                 )
    order by  id DESC 

它看起来工作得很好(不确定它是否能像大百万行的大记录一样正常工作?)。 但真正的问题是,如果最后一条消息是由用户接收而不是最后一条消息,则它只按顺序提取。

例:

用户390已按以下顺序接收来自以下用户的消息:

  1. 385
  2. 421
  3. 422
  4. 423
  5. 424
  6. 429
  7. 430
  8. 431

因此,现在用户431是最新的并且出现在列表的顶部,但是如果用户390回复给用户431,则它保持在底部,而我希望它基于最后的交互出现在顶部。

我希望我解释得很好。

编辑:这是一个SQL小提琴: http ://sqlfiddle.com/#! 9/82417/2

在此示例中,带有“573”的行ID应显示在顶部,替换行#572,其余结果必须保持不变。 另外,具有user_id_s的第二列应该在第一行给出'431',就像现在一样。

“last”的定义:您需要代替MAX(id)

SELECT id
    FROM messages
    WHERE ...
    ORDER BY last_replied DESC
    LIMIT 1

缩放:请参阅Groupwise Max

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM