SQL Select Distinct Top 2 - PullRequest
       1

SQL Select Distinct Top 2

23 голосов
/ 31 марта 2011

Если у меня есть таблица с именем [Part] со столбцами [PartID], [IDNumber], [Length] и данными:

[PartID]  [IDNumber]  [Length]
1         Test1       50
2         Test1       60
3         Test2       50
4         Test3       70

Как выбрать только две верхние записи с отдельным номером IDN? После небольшого поиска я не смог найти запрос, который делает то, что я хочу. Я бы хотел, чтобы результаты выглядели так:

[PartID]  [IDNumber]  [Length]
1         Test1       50
3         Test2       50

Что у меня сейчас:

Select distinct top 2
        [PartID],
        [IDNumber],
        [Length]
from
    [Part]

Чтобы уточнить, что PartID на самом деле является GUID. Я думал, что написание GUID для каждой записи стало немного беспорядочным в моих данных примера.

Ответы [ 3 ]

49 голосов
/ 31 марта 2011
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
4 голосов
/ 31 марта 2011
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 
1 голос
/ 31 марта 2011

Вы не упомянули, какую строку выбрать для дубликата IDNumber. Из вашего примера, предполагая, что должен использоваться Min PartID, вы можете использовать следующий запрос. Его нужно немного подправить.

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...