Detta skulle göra 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;
Underfrågan sub
registrerar step
som true
om föregående rad är minst 2 minuter bort - sorterat efter tidsstämpelkolumnen done
sig själv i det här fallet.
Den yttre frågan lägger till ett rullande antal steg, i praktiken gruppnumret (grp
) - kombinerar det samlade FILTER
sats med en annan fönsterfunktion.
db<>spela här
Relaterat:
- Fråga för att hitta alla tidsstämplar med mer än ett visst intervall från varandra
- Hur märker man grupper i postgresql när grupptillhörighet beror på föregående rad?
- Välj längsta kontinuerliga sekvens
- Grupper eller fönster
Om det samlade FILTER
klausul:
- Hur kan jag förenkla den här spelstatistikfrågan?
- Villkorlig lead/lag-funktion PostgreSQL?