Di SQL Server 2008, saya menggunakan RANK() OVER (PARTITION BY Col2 ORDER BY Col3 DESC)
untuk mengembalikan kumpulan data dengan RANK
. Tapi saya punya ratusan catatan untuk setiap partisi, jadi saya akan mendapatkan nilai dari peringkat 1, 2, 3 ...... 999. Tapi saya hanya ingin RANKs
masing-masing 2 orang PARTITION
.
Contoh:
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
Saya ingin hasilnya:
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
Saya hanya ingin peringkat 1 dan 2 di setiap kategori. Bagaimana saya melakukan ini?
RANK(2) OVER (PARTITION BY Col2 ORDER B Y Col3) AS Top_2_Ranks
. Mungkin itu akan terjadi di rilis mendatang. Terima kasih untuk idenya.WHERE
klausa.sumber
Saya pikir cara untuk melakukan ini dalam SQL Server adalah dengan menggabungkan fungsi jendela dengan ekspresi tabel umum:
sumber
Untuk Teradara, Anda dapat melakukannya:
sumber