如何获得使用GROUP BY各组的最新记录? [重复] 如何获得使用GROUP BY各组的最新记

2019-05-31 21:25发布

这个问题已经在这里有一个答案:

  • 在列SQL只选择最大值行[复制] 27个答案

比方说,我有一个表称为messages与列:

id | from_id | to_id | subject | message | timestamp

我想从每个用户得到的最新消息而已,就像你会在你的Facebook收件箱中看到你深入到实际的线程之前。

该查询似乎让我接近的结果,我需要:

SELECT * FROM messages GROUP BY from_id

然而,查询是给我的每一个用户,而不是最新的最早的消息。

我不知道这一个了。

Answer 1:

你应该找出最后timestamp值各组(子查询)中,然后加入这个子查询表-

SELECT t1.* FROM messages t1
  JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id) t2
    ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp;


Answer 2:

试试这个

SELECT * FROM messages where id in (SELECT max(id) FROM messages GROUP BY from_id ) order by id desc


Answer 3:

该查询返回最后一条记录,每Form_id:

    SELECT m1.*
     FROM messages m1 LEFT JOIN messages m2
     ON (m1.Form_id = m2.Form_id AND m1.id < m2.id)
     WHERE m2.id IS NULL;


Answer 4:

这是一个标准的问题。

注意,MySQL允许你从GROUP BY子句,该标准SQL不省略列,但是当你使用MySQL工具你没有得到普遍的确定性结果。

SELECT *
  FROM Messages AS M
  JOIN (SELECT To_ID, From_ID, MAX(TimeStamp) AS Most_Recent
          FROM Messages
         WHERE To_ID = 12345678
         GROUP BY From_ID
       ) AS R
    ON R.To_ID = M.To_ID AND R.From_ID = M.From_ID AND R.Most_Recent = M.TimeStamp
 WHERE M.To_ID = 12345678

我已经添加的过滤器To_ID以匹配你可能有。 查询将工作,没有它,但一般返回更多的数据。 条件不应该需要两个嵌套查询和外部查询(优化程序自动推送的条件下)进行说明,但可以不伤害到重复的情况,如图所示。



Answer 5:

只是补充什么Devart说,下面的代码是不是根据问题订购:

SELECT t1.* FROM messages t1
  JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id) t2
    ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp;

在“GROUP BY”子句必须在主查询,因为我们需要先重新排序“源”来获得所需要的“分组”,因此:

SELECT t1.* FROM messages t1
  JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages ORDER BY timestamp DESC) t2
    ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp GROUP BY t2.timestamp;

问候,



Answer 6:

你需要对它们进行排序。

SELECT * FROM messages GROUP BY from_id ORDER BY timestamp DESC LIMIT 1



文章来源: How to get the latest record in each group using GROUP BY? [duplicate]