Това ще направи това:
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;
Подзаявката sub
записва step
като true
ако предишният ред е на най-малко 2 минути - сортирано по колоната с времеви печат done
в този случай.
Външната заявка добавя непрекъснат брой стъпки, ефективно номера на групата (grp
) - комбиниране на обобщения FILTER
клауза с друга функция на прозореца.
db<>цигулка тук
Свързано:
- Запитване за намиране на всички времеви печати, повече от определен интервал
- Как да маркирам групи в postgresql, когато принадлежността към групата зависи от предходния ред?
- Изберете най-дългата непрекъсната последователност
- Групиране или прозорец
Относно обобщения FILTER
клауза:
- Как мога да опростя тази заявка за статистически данни за играта?
- Условна функция за извеждане/закъснение PostgreSQL?