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.