Dies würde es tun:
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;
Die Unterabfrage sub
zeichnet step
auf als true
wenn die vorherige Zeile mindestens 2 min entfernt ist - sortiert nach der Zeitstempelspalte done
selbst in diesem Fall.
Die äußere Abfrage fügt eine fortlaufende Anzahl von Schritten hinzu, effektiv die Gruppennummer (grp
) - Kombinieren des Aggregats FILTER
-Klausel mit einer anderen Fensterfunktion.
db<>hier fummeln
Verwandte:
- Abfrage, um alle Zeitstempel zu finden, die mehr als ein bestimmtes Intervall voneinander entfernt sind
- Wie beschriftet man Gruppen in Postgresql, wenn die Gruppenzugehörigkeit von der vorangehenden Zeile abhängt?
- Längste fortlaufende Sequenz auswählen
- Gruppierung oder Fenster
Über das Aggregat FILTER
Klausel:
- Wie kann ich diese Spielstatistikabfrage vereinfachen?
- Bedingte Lead/Lag-Funktion PostgreSQL?