Questo lo farebbe:
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;
La sottoquery sub
registra il step
come true
se la riga precedente è ad almeno 2 minuti di distanza, ordinata in base alla colonna timestamp done
stesso in questo caso.
La query esterna aggiunge un conteggio progressivo di passaggi, in effetti il numero del gruppo (grp
) - combinando l'aggregato FILTER
clausola con un'altra funzione della finestra.
db<>gioca qui
Correlati:
- Query per trovare tutti i timestamp a più di un certo intervallo di distanza
- Come etichettare i gruppi in postgresql quando l'appartenenza al gruppo dipende dalla riga precedente?
- Seleziona la sequenza continua più lunga
- Raggruppamento o finestra
Informazioni sull'aggregato FILTER
clausola:
- Come posso semplificare questa query sulle statistiche di gioco?
- Funzione di anticipo/ritardo condizionale PostgreSQL?