Trong SQL Server 2008, tôi đang sử dụng RANK() OVER (PARTITION BY Col2 ORDER BY Col3 DESC)
để trả về tập dữ liệu RANK
. Nhưng tôi có hàng trăm bản ghi cho mỗi phân vùng, vì vậy tôi sẽ nhận được các giá trị từ xếp hạng 1, 2, 3 ...... 999. Nhưng tôi chỉ muốn tối đa 2 RANKs
trong mỗi PARTITION
.
Thí dụ:
ID Name Score Subject
1 Joe 100 Math
2 Jim 99 Math
3 Tim 98 Math
4 Joe 99 History
5 Jim 100 History
6 Tim 89 History
7 Joe 80 Geography
8 Tim 100 Geography
9 Jim 99 Geography
Tôi muốn kết quả là:
SELECT Subject, Name, RANK() OVER (PARTITION BY Subject ORDER BY Score DESC)
FROM Table
Subject Name Rank
Math Joe 1
Math Jim 2
History Jim 1
History Joe 2
Geography Tim 1
Geography Jim 2
Tôi muốn chỉ xếp hạng 1 và 2 trong mỗi thể loại. Làm thế nào để tôi làm điều này?
RANK(2) OVER (PARTITION BY Col2 ORDER B Y Col3) AS Top_2_Ranks
. Có thể nó sẽ xảy ra trong phiên bản tương lai. Cảm ơn ý tưởng mặc dù.