按时间

时间:2018-02-10 18:40:31

标签: mysql sql

以下快照表示不同用户之间的对话。我想尝试每个用户之间的最后一次对话。例如,1到16,1和17之间的最后一次对话,依此类推。因此,1和16将与16和1相同。 enter image description here

我写了以下查询:

select distinct senderId, receiveId, messageId, message from messages 
  where senderId in (1,16) order by sentTime

这告诉我1和16之间的最新对话,但之前没有发现senderId。那我怎么能找到这些结果?

1 个答案:

答案 0 :(得分:1)

您可以使用group by。如果消息ID随时间增加(我假设为真),这一点特别容易:

select least(senderId, receiverId) as id1,
       greatest(senderId, receiverId) as id2,
       max(messageId), max(sentTime)
from messages
group by id1, id2;

如果您需要其他信息,例如消息文本,只需将其用作子查询并加入其他信息。