OVER()
klausul behövs så att SQL Server vet exakt hur du vill bestämma saker som RANK()
. Vad RANK()
förväntar du dig om du inte förser SQL Server med beställningskriterier? Är vinnaren av ett lopp den som har snabbast tid, långsammast tid eller förnamn alfabetiskt?
Du behöver inte ta bort ORDER BY
klausul när du lägger till en ORDER BY
sats i OVER()
. Dessa används oberoende - en för att bestämma RANK()
och den andra för att diktera ordning.
Så, till exempel, om du vill returnera de som har avslutat ett lopp, men beställer dem sista plats till första plats, kan du säga:
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last