我有两个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
答案 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;