OVER() клаузата е необходима, така че SQL Server да знае точно как искате да определи неща като RANK() . Какво RANK() очаквате ли, ако не предоставите на SQL Server критерии за поръчка? Дали победителят в състезание е този с най-бързо време, най-бавно време или първото име по азбучен ред?
Не е необходимо да премахвате ORDER BY клауза, когато добавите ORDER BY клауза вътре в OVER() . Те се използват независимо - един за определяне на RANK() а другият да диктува подреждането.
Така че, например, ако искате да върнете завършилите в състезание, но да ги подредите от последното място до първото, можете да кажете:
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last