Le OVER() La clause est nécessaire pour que SQL Server sache exactement comment vous voulez déterminer des choses comme RANK() . Quel RANK() attendez-vous si vous ne fournissez pas à SQL Server un critère de commande ? Le vainqueur d'une course est-il celui qui a réalisé le temps le plus rapide, le temps le plus lent ou le prénom par ordre alphabétique ?
Vous n'avez pas besoin de supprimer le ORDER BY clause lorsque vous ajoutez un ORDER BY clause à l'intérieur de OVER() . Ceux-ci sont utilisés indépendamment - un pour déterminer le RANK() et l'autre pour dicter la commande.
Ainsi, par exemple, si vous vouliez ramener les finissants d'une course, mais les classer de la dernière place à la première place, vous pourriez dire :
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last