En SQL Server 2008, estoy usando RANK() OVER (PARTITION BY Col2 ORDER BY Col3 DESC)
para devolver el conjunto de datos con RANK
. Pero tengo cientos de registros para cada partición, por lo que obtendré valores del rango 1, 2, 3 ... 999. Pero solo quiero hasta 2 RANKs
en cada uno PARTITION
.
Ejemplo:
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
Quiero que el resultado sea:
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
Solo quiero el rango 1 y 2 en cada categoría. ¿Cómo hago esto?
RANK(2) OVER (PARTITION BY Col2 ORDER B Y Col3) AS Top_2_Ranks
. Puede ser que suceda en futuras versiones. Gracias por la idea sin embargo.WHERE
cláusula.fuente
Creo que la forma de hacer esto en SQL Server es combinar la función de ventana con una expresión de tabla común:
fuente
Para Teradara, alternativamente, puede hacer:
fuente