如何只在sql中选择唯一的行?

时间:2010-09-27 08:59:56

标签: sql sql-server tsql

我在Messages表中有两列,senderUserID和recieverUserID。 我选择senderUserID和recieverUserID,其中当前接收者过去向当前发送者发送了一条消息。我每次只选择10行,但有时在这个表中,当我需要时,senderUserID会出现多次,只有senderUserID才是唯一的,而recieverUserID可以返回多次。

这是样本数据

66622   61350
90166   79222
90176   79222
86727   80452
10888   47305
66560   79219
66622   80452
89548   14452
66622   69177
52081   79223

如您所见,66622在senderUserID中出现两次。我如何限制它只出现一次。

感谢

2 个答案:

答案 0 :(得分:5)

;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

答案 1 :(得分:4)

我会说忽略任何重复。这将为您的每个批次提供少于10个结果,但我更喜欢通过对数据库进行分组来强制执行唯一性(可能很昂贵)。这里的目标是最大化消息吞吐量,对吗?

如果您仍想在SQL中执行此操作:

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