Si j'ai une table nommée [Part] avec des colonnes [PartID], [IDNumber] et [Length] et des données:
[PartID] [IDNumber] [Length]
1 Test1 50
2 Test1 60
3 Test2 50
4 Test3 70
Comment puis-je sélectionner uniquement les 2 premiers enregistrements avec un IDNumber distinct? Après avoir cherché un peu, je n'ai pas pu trouver une requête qui fait ce que je veux. J'aimerais que les résultats ressemblent à ceci:
[PartID] [IDNumber] [Length]
1 Test1 50
3 Test2 50
Ce que j'ai maintenant:
Select distinct top 2
[PartID],
[IDNumber],
[Length]
from
[Part]
Pour clarifier que le PartID est en fait un GUID. Je pensais qu'écrire le GUID pour chaque enregistrement devenait un peu décousu dans mes données d'exemple.
SELECT DISTINCT TOP 2 PartId, IdNumber, Length
FROM
( SELECT PartId, IdNumber, Length, ROW_NUMBER() over(partition by IdNumber order by Length) Orden
FROM [Ayuda]
) A
WHERE A.Orden = 1
ORDER BY Length
SELECT TOP 2 b.*
FROM (SELECT idnumber,
MIN(partid) partid
FROM part
GROUP BY idnumber) a
JOIN part b
ON a.partid = b.partid
ORDER BY b.partid
Vous n'avez pas indiqué quelle ligne sélectionner pour IDNumber en double. Dans votre exemple, en supposant que Min PartID doit être utilisé, vous pouvez utiliser la requête suivante. Il faudrait le peaufiner un peu.
Select Top 2
P.*
From
[Part] P
Inner Join
(
Select
[IDNumber]
,Min([PartID]) As MinPartID,
From
[Part]
Group By
[IDNumber]
) T
On
P.PartID = T.MinPartID
And
P.IDNumber = T.IDNumber -- May not be needed is PartID is primary Key
Order By
P.[PartID]
,P.[IDNumber]