sql >> データベース >  >> RDS >> PostgreSQL

タイムスタンプを(任意のギャップに基づいて)アイランドにグループ化する方法は?

    これでうまくいくでしょう:

    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?


    1. ローリング日付範囲内の個別の値の数を照会します

    2. PostgreSQLを垂直方向にスケーリング

    3. OracleSQLDeveloperでの新しいデータベースと新しい接続の作成

    4. オラクル-どのステートメントをコミットする必要がありますか?