Как выбрать уникальные строки только в SQL? - PullRequest
2 голосов
/ 27 сентября 2010

У меня есть два столбца, 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 ]

5 голосов
/ 27 сентября 2010
;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
4 голосов
/ 27 сентября 2010

Я бы сказал, просто игнорируйте любые дубликаты.Это даст вам менее десяти результатов для каждого из ваших пакетов, но я бы предпочел, чтобы это обеспечивало уникальность путем группировки в базе данных (это может быть дорого).Цель здесь - максимизировать пропускную способность сообщений, верно?

Если вы все еще хотите сделать это в SQL:

 select senderUserId, max(receiverUserId) from messages group by senderUserId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...