从分组消息SQL返回最后一条消息

时间:2016-10-30 14:12:46

标签: mysql sql

我有两个sql表,一个有用户,另一个有消息。

现在我的查询是:

SELECT messages.*, username FROM messages
JOIN users ON messages.from_ID = users.user_ID
WHERE to_ID = 19
GROUP BY thread_ID
ORDER BY msg_ID DESC;

实体(消息):

msg_ID
from_ID
to_ID
subject
message
date

现在,它正在返回 FIRST 消息to_ID = 19。我想要做的是显示由最高msg_ID订购的最新消息。我可以对它执行order by但是我的sql语句只返回一行,所以我必须在它到达group by语句之前做一些事情。

如果这两行有资格返回:

msg_ID from_ID to_ID subject message date thread_id username
15  26  19  Hey testing string2 1477750565 1 testing
17  26  19  Hey testing string. 1477750594 1 testing

我目前的结果:

msg_ID from_ID to_ID subject message date thread_id username  
15  26  19  Hey testing string2 1477750565 1 testing

我想要的是什么:

msg_ID from_ID to_ID subject message date thread_id username  
17  26  19  Hey testing string. 1477750594 1 testing // msg_ID is higher here

1 个答案:

答案 0 :(得分:1)

您应该通过选择正确的消息而不是使用聚合来执行此操作。这是一种方法:

SELECT m.*, u.username
FROM messages m JOIN
     users u
     ON m.from_ID = u.user_ID
WHERE m.to_ID = 19 AND
      m.msg_id = (SELECT MAX(m2.msg_id)
                  FROM messages m2
                  WHERE m2.thread_id = m.thread_id AND m2.to_ID = m.to_ID
                 )
ORDER BY msg_ID DESC;