2010-09-27 9 views
2

J'ai deux colonnes, senderUserID et recieverUserID dans la table de messages. Je sélectionne senderUserID et recieverUserID où le récepteur actuel a envoyé un message à l'expéditeur actuel dans le passé. Je sélectionne 10 lignes seulement à chaque fois mais parfois dans cette table senderUserID apparaît plus d'une fois quand j'ai besoin que seul senderUserID sera unique, tandis que recieverUserID peut retourner autant de fois que cela arrive.Comment sélectionner des lignes uniques uniquement en SQL?

c'est des exemples de données

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

comme vous pouvez le voir 66622 apparaît deux fois dans senderUserID. Comment puis-je le limiter à n'apparaître qu'une seule fois.

merci

+2

Lequel des deux récepteurs ne voulez-vous voir cette senderUserId? – Thilo

+0

n'a pas d'importance tbh. – eugeneK

Répondre

4

Je dirais juste ignorer les doublons. Cela vous donnera moins de dix résultats pour chacun de vos lots, mais je préférerais que l'on fasse respecter l'unicité par regroupement sur la base de données (cela pourrait être coûteux). L'objectif ici est de maximiser le débit des messages, n'est-ce pas?

Si vous voulez continuer à le faire dans SQL:

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

merci, fait ce qu'il devrait faire ... – eugeneK

+0

votre réponse est meilleure que le mien :) – AlexanderMP

+0

Notez qu'il est "injuste" contre les récepteurs avec des identifiants faibles ... – Thilo

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

Semble fonctionner. Si eugeneK veut sélectionner 10 enregistrements seulement, il devrait changer les dernières lignes à: SELECT TOP 10 senderUserID, recieverUserID FROM cte O WH RN = 1 – devmake

+0

merci @ Martin Smith ... La requête de Thilo fonctionne plus vite avec mon jeu de données même si votre solution est fonctionne très bien ... – eugeneK

Questions connexes