从另一个ID分组的表中选择最近的(前1个)

Hop*_*ppe 2 sql sql-server-2008

我有一个表包含与用户之间的消息.如何使用SQL选择用户发送的所有消息.我想通过MessageSenderUserID对结果进行分组.我还想只返回最近的每个收件人.

我尝试在having子句中使用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
Run Code Online (Sandbox Code Playgroud)

谢谢!

Nik*_*vić 5

我最近才学会了这种(最令人惊讶和有趣)的方式来获得一组中的前1项:

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

诀窍是按顺序 - 结果按部分分组并按排序键排序,导致每个组接收第一行的数字1.With ties返回所有.哦应用机械师的快乐!