ВЫБЕРИТЕ ТОП 1 ГРУППУ В ТАБЛИЦЕ - PullRequest
2 голосов
/ 14 февраля 2020

В таблице ORD,

ORD_CODE    PROD_CODE
200212013   66298
200212014   66298
200212006   66297
200212007   66296
200212012   66296
200211025   66295
200211026   66295
200211027   66295
200211028   66295
200211029   66295
200211030   66295
200211031   66295
200211032   66295
200211033   66295
200211034   66295

Я хочу

200212014   66298
200212006   66297
200212012   66296
200211034   66295

Я использую SELECT DISTINCT PROD_CODE, ORD_CODE FROM ORDERT, но он не работает.

И я использую RankNo? но не работает тоже.

Подзапрос, COUNT (), TOP 1, DESNSE_RANK, все не работает.

Ответы [ 3 ]

3 голосов
/ 14 февраля 2020

Одним из способов сделать это, избегая явного подзапроса, является использование TOP 1 WITH TIES:

SELECT TOP 1 WITH TIES ORD_CODE, PROD_CODE
FROM yourTable
ORDER BY ROW_NUMBER() OVER (PARTITION BY PROD_CODE ORDER BY ORD_CODE DESC);
2 голосов
/ 14 февраля 2020

Если в вашем наборе данных всего два столбца, простой агрегации должно быть достаточно:

select min(ord_code) ord_code, prod_code
from mytable
group by prod_code
1 голос
/ 14 февраля 2020

DEMO ON DB <> FIDDLE

Вы можете использовать ROW_NUMBER () для его достижения

;WITH cte_TempData as (
  SELECT ORD_CODE, PROD_CODE, ROW_NUMBER() OVER (PARTITION BY PROD_CODE ORDER BY ORD_CODE DESC) Row_Number
  FROM #TempTable
)
SELECT ORD_CODE, PROD_CODE
FROM cte_TempData
WHERE Row_Number = 1

Выход

enter image description here

...