Il OVER() è necessaria in modo che SQL Server sappia esattamente come si desidera determinare cose come RANK() . Cosa RANK() ti aspetti se non fornisci a SQL Server un criterio di ordinazione? Il vincitore di una gara è quello con il miglior tempo, il tempo più lento o il nome in ordine alfabetico?
Non è necessario rimuovere ORDER BY clausola quando aggiungi un ORDER BY clausola all'interno di OVER() . Questi sono usati indipendentemente - uno per determinare il RANK() e l'altro per dettare l'ordine.
Quindi, ad esempio, se desideri restituire i finalisti di una gara, ma ordinarli dall'ultimo al primo posto, potresti dire:
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last