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