如何仅在sql中选择唯一行?

如何仅在sql中选择唯一行?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在Messages表中有两列,senderUserID和receiveUserID。 我选择senderUserID和ReceiveUserID,当前接收者在过去向当前发送者发送消息。我每次只选择10行,但有时在此表中,当我需要唯一的senderUserID时,senderUserID会多次出现,而ReceiveUserId可以返回任意次数 这是示例数据 66622 61350 90166 79222 90176 79222 86727 80452 10888 47305

我在Messages表中有两列,senderUserID和receiveUserID。 我选择senderUserID和ReceiveUserID,当前接收者在过去向当前发送者发送消息。我每次只选择10行,但有时在此表中,当我需要唯一的senderUserID时,senderUserID会多次出现,而ReceiveUserId可以返回任意次数

这是示例数据

66622   61350
90166   79222
90176   79222
86727   80452
10888   47305
66560   79219
66622   80452
89548   14452
66622   69177
52081   79223
如您所见,66622在senderUserID中出现了两次。如何将其限制为仅显示一次


谢谢

我想说的是忽略任何重复的。这将为每个批处理提供不到10个结果,但我更喜欢通过在数据库上分组来实现唯一性(可能会很昂贵)。这里的目标是最大化消息吞吐量,对吗

如果仍要在SQL中执行此操作,请执行以下操作:

 select senderUserId, max(receiverUserId) from messages group by senderUserId

对于此senderUserId,您希望看到两个接收者中的哪一个?您的答案比我的好:)@Thilo,此查询每天应请求运行几次,因此我不太担心IO或内存使用情况。@Thilo,我反对低IDs而不是max。您可以使用列表功能:选择senderUserId,列表(receiverUserId)从消息组按1查看工作。如果eugeneK只想选择10条记录,他应该将最后一行更改为:选择前10个senderUserID,从cte接收用户ID,其中RN=1thanks@Martin Smith。。。Thilo的查询在我的数据集上运行得更快,即使您的解决方案很好。。。
;WITH cte AS
(
SELECT senderUserID, 
       recieverUserID,
       ROW_NUMBER() OVER (PARTITION BY senderUserID ORDER BY recieverUserID) AS RN
FROM YourTable
)
SELECT senderUserID,recieverUserID FROM cte 
WHERE RN=1