W SQL Server 2008 używam RANK() OVER (PARTITION BY Col2 ORDER BY Col3 DESC)do zwracania zestawu danych za pomocą RANK. Ale mam setki rekordów dla każdej partycji, więc otrzymam wartości od rangi 1, 2, 3 ...... 999. Ale chcę tylko do 2 RANKsw każdym PARTITION.
Przykład:
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
Chcę, aby wynik był:
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
Chcę tylko rangi 1 i 2 w każdej kategorii. Jak mam to zrobic?
RANK(2) OVER (PARTITION BY Col2 ORDER B Y Col3) AS Top_2_Ranks. Może tak się stanie w przyszłych wydaniach. Dzięki za pomysł.