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

时间:2016-10-17 07:14:32

标签: mysql sql mariadb

我正在编写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
  9. 所以现在用户431是最新的并且出现在列表的顶部,但是如果用户390回复到用户431,则它保持在底部,而我希望它基于最后的交互出现在顶部。

    我希望我解释得很好。

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

    在此示例中,行号为' 573'应该出现在顶部替换#572行,结果的其余部分必须保持相同。另外,具有user_id_s的第二列应该给出' 431'在第一行,就像现在一样。

1 个答案:

答案 0 :(得分:0)

" last"的定义:而不是MAX(id),您需要

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

缩放:请参阅Groupwise Max

相关问题