Как выбрать TOP 'n' строк с уникальными значениями и наибольшим количеством в SQL - PullRequest
0 голосов
/ 15 апреля 2019

Я работаю в SSMS v17.6, и мне нужно собрать 3 верхние строки для каждого уникального "ID" и "FRUIT" с самыми высокими значениями, как показано ниже.

ПРИМЕРНЫЕ ДАННЫЕ

ID  FRUIT   OTHER_ID    VALUE 
GG-1    APPLE   25432   100
GG-1    APPLE   37586   200
GG-1    APPLE   33614   400
GG-1    APPLE   70776   500
GG-1    APPLE   52102   600
GG-2    BANANA  33745   150
GG-2    BANANA  44823   250
GG-2    BANANA  88313   350
GG-2    BANANA  25181   450
GG-2    BANANA  65301   650

РЕЗУЛЬТАТ (топ 3)

ID  FRUIT   OTHER_ID    VALUE       
GG-1    APPLE   33614   400
GG-1    APPLE   70776   500
GG-1    APPLE   52102   600
GG-2    BANANA  88313   350
GG-2    BANANA  25181   450
GG-2    BANANA  65301   650

Данные не ограничиваются двумя фруктами и идентификаторами, отображаемыми в этом примере, но каждый фрукт имеет уникальный идентификатор. Я думаю, что это может быть сделано только на основе самого ID. На мой взгляд, SELECT TOP(n) не будет работать и не будет Order By ... LIMIT n

Возможно, какая-то функция ранга сделала бы это, но я не уверен в необходимой здесь терминологии.

1 Ответ

1 голос
/ 15 апреля 2019

Использование row_number():

select t.*
from (select t.*,
             row_number() over (partition by id, fruit order by VALUE desc) as seqnum
      from t
     ) t
where seqnum <= 3;
...