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