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