OVER()
klauzule je potřeba, aby SQL Server přesně věděl, jak chcete určit věci jako RANK()
. Co RANK()
očekáváte, že nedodáte serveru SQL Server kritéria pro objednávání? Je vítězem závodu ten s nejrychlejším časem, nejpomalejším časem nebo křestním jménem podle abecedy?
Nemusíte odstraňovat ORDER BY
klauzule, když přidáte ORDER BY
klauzule uvnitř OVER()
. Ty se používají nezávisle – jedna k určení RANK()
a druhý diktovat pořadí.
Takže pokud byste například chtěli vrátit závodníky, kteří dokončili závod, ale řadit je z posledního místa na první místo, můžete říct:
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last