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;
Zatímco mluvíte o „hodnocení“, zdá se, že chcete výsledek funkce okna row_number()
.
- Vytvářejte skupiny po sobě jdoucích dnů (stejné datum v
grp
) v poddotazusub
. - Očíslujte řádky jiným
row_number()
volání, tentokrát rozdělené podlegrp
.
Jeden dílčí dotaz je zde naprosté minimum, protože funkce okna nelze vnořovat.
Všimněte si, že jsem použil druhou verzi vašich protichůdných ukázkových dat. A výsledek je takový, jak @mu navrhl
v jeho komentáři.
Také za předpokladu, že neexistují žádná duplicitní data. V tomto případě byste museli nejprve agregovat.