我得到的消息表(簡體):分組不同的列的查詢
MessageId,
FromUserId,
ToUserId,
Text
,並希望進行查詢輸出作爲聊天列表如下:
LastMessageId,
UserId,
Text
所以基本上創建一個將FromUserId和ToUserId分組的查詢,但前提是其中一個是我自己的userId。
於是我想出了這一點:
SELECT (MessageId)
,(Text)
,(FromUserId)
,(ToUserId)
FROM [Messages] a
inner join (select FromUserId as FromId, ToUserId as ToId, Max(MessageId) as MaxId from Messages where MessageId > 0 group by FromUserId, ToUserId) as b on
a.MessageId = b.MaxId
join users u on FromUserId = u.userId
where ToUserId = 123 or FromUserId = 123
有了這個,我有一半的路該輸出(說123是我的用戶ID):
MessageId, Text, FromUserId, ToUserId
1 bla 123 345
2 bla2 345 123
3 bla3 678 123
4 bla4 123 678
我想有一個這樣的輸出:
MessageId, Text, UserId
2 bla2 345
4 bla4 678
所以我忽略自己的用戶ID和只有每次談話的最後一條消息。
這可以在1個查詢中完成嗎?到現在爲止,我只是獲取所有的消息,並通過代碼處理這些消息。
你如何定義 「對話」?請注意,通常不應該依賴於ID的順序,而是使用日期/時間/時間戳列(而不是在本質上是日誌,但是在任何時候「何時」可以改變)的問題 - ID應該被認爲是無價值的。 –