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