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 RANKs
w 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ł.WHERE
klauzuli.źródło
Myślę, że sposobem na to w SQL Server jest połączenie funkcji okna ze wspólnym wyrażeniem tabelowym:
źródło
W przypadku Teradary alternatywnie możesz:
źródło