В SQL Server 2008 я использую, RANK() OVER (PARTITION BY Col2 ORDER BY Col3 DESC)
чтобы вернуть набор данных с RANK
. Но у меня есть сотни записей для каждого раздела, поэтому я получу значения с рангом 1, 2, 3 ... 999. Но я хочу только до 2 RANKs
в каждом PARTITION
.
Пример:
ID Name Score Subject
1 Joe 100 Math
2 Jim 99 Math
3 Tim 98 Math
4 Joe 99 History
5 Jim 100 History
6 Tim 89 History
7 Joe 80 Geography
8 Tim 100 Geography
9 Jim 99 Geography
Я хочу, чтобы результат был:
SELECT Subject, Name, RANK() OVER (PARTITION BY Subject ORDER BY Score DESC)
FROM Table
Subject Name Rank
Math Joe 1
Math Jim 2
History Jim 1
History Joe 2
Geography Tim 1
Geography Jim 2
Я хочу только ранг 1 и 2 в каждой категории. Как мне это сделать?
RANK(2) OVER (PARTITION BY Col2 ORDER B Y Col3) AS Top_2_Ranks
, Может быть, это произойдет в будущих выпусках. Спасибо за идею, хотя.WHERE
предложении.источник
Я думаю, что способ сделать это в SQL Server - объединить оконную функцию с общим табличным выражением:
источник
Для Teradara вы также можете сделать:
источник