これでうまくいくでしょう:
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?