SELECT heading, thedate
,row_number() OVER (PARTITION BY grp ORDER BY thedate) AS rn
FROM (
SELECT *, thedate - (row_number() OVER (ORDER BY thedate))::int AS grp
FROM demo
) sub;
Saat Anda berbicara tentang "peringkat", Anda sepertinya menginginkan hasil dari fungsi jendela row_number()
.
- Bentuk grup hari berturut-turut (tanggal yang sama di
grp
) di subkuerisub
. - Beri nomor baris dengan
row_number()
lainnya panggilan, kali ini dipartisi olehgrp
.
Satu subquery adalah minimal di sini, karena fungsi jendela tidak dapat disarangkan.
Perhatikan bahwa saya menggunakan versi kedua dari data sampel Anda yang kontradiktif. Dan hasilnya seperti @mu disarankan
dalam komentarnya.
Juga dengan asumsi bahwa tidak ada tanggal duplikat. Anda harus menggabungkan terlebih dahulu dalam kasus ini.