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.