我需要为具有给定id的用户选择每个会话的所有最后消息。
如果最后一条消息被发送到给定的id,它必须是发件人的最后一条消息。
以下是未使用messageid创建日期的测试用例:
+-----------+------------+----------+------+
| messageID | fromUserID | toUserID | text |
+-----------+------------+----------+------+
| 1 | 1 | 2 | 'aa' |
| 2 | 1 | 3 | 'ab' |
| 3 | 2 | 1 | 'ac' |
| 4 | 2 | 1 | 'ad' |
| 5 | 3 | 2 | 'ae' |
+-----------+------------+----------+------+
userid=1的结果必须是文本为“ab”和“ad”的消息。
现在,我有了这个查询,其中包含每个用户相互之间的所有最后消息,但根据我的测试用例,没有删除id=1的消息(必须只有id=2和id=4)。
SELECT
UM.messageID,
UM.fromUserID, UM.toUserID,
UM.text, UM.flags, UM.creationDate
FROM UserMessage AS UM
INNER JOIN
(
SELECT
MAX(messageID) AS maxMessageID
FROM UserMessage
GROUP BY fromUserID, toUserID
) IUM
ON UM.messageID = IUM.maxMessageID
WHERE UM.fromUserID = 1 OR UM.toUserID = 1
ORDER BY UM.messageID DESC
1条答案
按热度按时间tquggr8v1#
一个简单的方法是
或者,在mysql 8+中: