To by to zrobiło:
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;
Podzapytanie sub
zapisuje step
jako true
jeśli poprzedni wiersz jest oddalony o co najmniej 2 minuty - posortowany według kolumny sygnatury czasowej done
w tym przypadku.
Zewnętrzne zapytanie dodaje kroczącą liczbę kroków, w rzeczywistości numer grupy (grp
) - łączenie agregatu FILTER
klauzula z inną funkcją okna.
db<>graj tutaj
Powiązane:
- Zapytanie, aby znaleźć wszystkie znaczniki czasu oddalone od siebie o więcej niż określony odstęp
- Jak oznaczyć grupy w postgresql, gdy przynależność do grupy zależy od poprzedniego wiersza?
- Wybierz najdłuższą ciągłą sekwencję
- Grupowanie lub okno
Informacje o agregacie FILTER
klauzula:
- Jak mogę uprościć to zapytanie o statystyki gry?
- Warunkowa funkcja wyprzedzenia/opóźnienia w PostgreSQL?