Ответ 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
Если у меня есть таблица с именем [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 для каждой записи было немного бесполезным в моих данных примера.
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
Вы не указали, какую строку выбрать для дублирующего 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]