我有一个表,其中包含与用户之间的消息。如何使用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
返回所有的。哦,应用技工的喜悦!