O
OVER() cláusula é necessária para que o SQL Server saiba exatamente como você deseja determinar coisas como RANK() . O que RANK() você espera se não fornecer ao SQL Server um critério de ordenação? O vencedor de uma corrida é aquele com o tempo mais rápido, o tempo mais lento ou o primeiro nome em ordem alfabética? Você não precisa remover o
ORDER BY cláusula quando você adiciona um ORDER BY cláusula dentro do OVER() . Estes são usados independentemente - um para determinar o RANK() e o outro para ditar a ordenação. Então, por exemplo, se você quiser devolver os finalistas de uma corrida, mas ordená-los do último lugar ao primeiro lugar, você pode dizer:
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last