Cela le ferait :
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 sous-requête sub
enregistre step
comme true
si la ligne précédente est à au moins 2 minutes - trié par la colonne d'horodatage done
lui-même dans ce cas.
La requête externe ajoute un nombre continu d'étapes, en fait le numéro de groupe (grp
) - combinant l'agrégat FILTER
clause avec une autre fonction de fenêtre.
db<>jouez ici
Connexe :
- Requête pour trouver tous les horodatages à plus d'un certain intervalle
- Comment étiqueter les groupes dans postgresql lorsque l'appartenance au groupe dépend de la ligne précédente ?
- Sélectionner la séquence continue la plus longue
- Regroupement ou fenêtre
À propos de l'agrégat FILTER
clause :
- Comment puis-je simplifier cette requête de statistiques de jeu ?
- Fonction avance/décalage conditionnel PostgreSQL ?