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;
Medan du talar om "rank" verkar du vilja ha resultatet av fönsterfunktionen row_number()
.
- Forma grupper av på varandra följande dagar (samma datum i
grp) i underfrågansub. - Antal rader med en annan
row_number()samtal, denna gång partitionerat medgrp.
En underfråga är det absoluta minimum här, eftersom fönsterfunktioner inte kan kapslas.
Observera att jag gick med den andra versionen av dina motsägelsefulla exempeldata. Och resultatet är som @mu föreslog
i sin kommentar.
Också förutsatt att det inte finns några dubbletter av datum. Du måste lägga ihop först i det här fallet.