Подтвердить что ты не робот

SQL Select Distinct Top 2

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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 

Ответ 3

Вы не указали, какую строку выбрать для дублирующего 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]