![](/img/trans.png)
[英]Retrieving the last record from each group in MySQL query which includes multiple joins
[英]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已按以下顺序接收来自以下用户的消息:
因此,现在用户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.