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 RANKstrong 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ù.