Dit zou het doen:
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;
De subquery sub
records step
als true
als de vorige rij minstens 2 minuten verwijderd is - gesorteerd op de tijdstempelkolom done
zichzelf in dit geval.
De buitenste query voegt een rollend aantal stappen toe, in feite het groepsnummer (grp
) - combineren van het geaggregeerde FILTER
clausule met een andere vensterfunctie.
db<>viool hier
Gerelateerd:
- Query om alle tijdstempels te vinden die meer dan een bepaald interval uit elkaar liggen
- Hoe groepen in postgresql te labelen als het behoren tot een groep afhangt van de voorgaande regel?
- Selecteer de langste aaneengesloten reeks
- Groeperen of Venster
Over het totale FILTER
clausule:
- Hoe kan ik deze zoekopdracht met spelstatistieken vereenvoudigen?
- Voorwaardelijke lead/lag-functie PostgreSQL?