El OVER()
Se necesita una cláusula para que SQL Server sepa exactamente cómo desea determinar cosas como RANK()
. Qué RANK()
¿Qué espera si no proporciona a SQL Server un criterio de pedido? ¿El ganador de una carrera es el que tiene el tiempo más rápido, el más lento o el nombre en orden alfabético?
No es necesario que elimine el ORDER BY
cláusula cuando agrega un ORDER BY
cláusula dentro de OVER()
. Estos se usan de forma independiente:uno para determinar el RANK()
y el otro para dictar pedidos.
Entonces, por ejemplo, si quisiera devolver los finalistas de una carrera, pero ordenarlos del último lugar al primero, podría decir:
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last