我有一个表,其中包含与用户之间的消息。如何使用SQL选择用户发送的所有消息。我想按MessageSenderUserID将结果分组。我也只想返回每个接收者的最新信息。

我试图在hading子句中使用MAX,但这似乎不是正确的解决方案。

我最好将它描述为以下查询的组合:

SELECT TOP 1 MessageID, MessageSent, MessageSenderUserID, MessageRecipientUserID
FROM [Messaging_Message]
WHERE MessageSenderUserID = 799
ORDER BY MessageSent DESC

SELECT MessageSenderUserID
FROM [Messaging_Message]
GROUP BY MessageSenderUserID

谢谢!

最佳答案

我直到最近才学会了这种(最令人惊讶和最有趣的)方式来获得小组中的第一名:

select top 1 with ties
    MessageID,
    MessageSent,
    MessageSenderUserID,
    MessageRecipientUserID
from [Messaging_Message]
order by row_number() over (partition by MessageSenderUserID
                            order by MessageSent desc)

技巧是按顺序排序的-结果按部分划分,并按排序键排序,结果每个组的第一行接收数字1。 With ties返回所有的。哦,应用技工的喜悦!

09-27 09:59