OVER()
mệnh đề cần thiết để SQL Server biết chính xác cách bạn muốn xác định những thứ như RANK()
. Cái gì RANK()
bạn có mong đợi nếu bạn không cung cấp SQL Server với một tiêu chí đặt hàng không? Người chiến thắng cuộc đua là người có thời gian nhanh nhất, thời gian chậm nhất hay tên theo thứ tự bảng chữ cái đầu tiên?
Bạn không cần xóa ORDER BY
khi bạn thêm ORDER BY
mệnh đề bên trong OVER()
. Chúng được sử dụng độc lập - một để xác định RANK()
và cái kia để ra lệnh đặt hàng.
Vì vậy, ví dụ:nếu bạn muốn đưa người về đích của một cuộc đua nhưng xếp họ ở vị trí cuối cùng với vị trí đầu tiên, bạn có thể nói:
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last