Dette ville gøre det:
SELECT done, count(*) FILTER (WHERE step) OVER (ORDER BY done) AS grp
FROM (
SELECT done
, (lag(done) OVER (ORDER BY done) <= done - interval '2 min') AS step
FROM tbl
) sub
ORDER BY done;
Underforespørgslen sub
registrerer step
som true
hvis den forrige række er mindst 2 minutter væk - sorteret efter tidsstemplet kolonnen done
sig selv i dette tilfælde.
Den ydre forespørgsel tilføjer et rullende antal trin, faktisk gruppenummeret (grp
) - kombinerer det samlede FILTER
klausul med en anden vinduesfunktion.
db<>spil her
Relateret:
- Forespørgsel for at finde alle tidsstempler med mere end et bestemt interval fra hinanden
- Hvordan mærker man grupper i postgresql, når gruppetilhørsforhold afhænger af den foregående linje?
- Vælg den længste sammenhængende sekvens
- Grupper eller vindue
Om det samlede FILTER
klausul:
- Hvordan kan jeg forenkle denne spilstatistikforespørgsel?
- Betinget lead/lag-funktion PostgreSQL?