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

複数の期間を1つに結合するpostgresql

    次のプロセスを使用することをお勧めします:

    1-行がいつ新しいかを特定するため、重複しない値に1の値を指定します(CTE b)

    2-他の行と重複している行を順番に並べます。このようにして、MAXとMINの開始と終了(CTE c)を可能にする共通の識別子があることがわかります

    3-シーケンスごとに、最終的な値が得られるように、begatのMINとendatのMAXを指定します

    WITH a AS (
    select '2017-09-16 07:12:57' as begat,'2017-09-16 11:30:22' as endat
    union 
    select '2017-09-18 17:05:21' ,'2017-09-19 13:18:01'
    union 
    select '2017-09-19 15:34:40' ,'2017-09-22 13:29:37'
    union 
    select '2017-09-22 12:24:16' ,'2017-09-22 13:18:29' 
    union 
    select '2017-09-28 09:48:54' ,'2017-09-28 13:39:13'
    union 
    select '2017-09-20 13:52:43' ,'2017-09-20 14:14:43' 
      )
    , b AS (
    SELECT
        begat
      , endat
      , (begat > MAX(endat) OVER w IS TRUE)::INT is_new
    FROM a
    WINDOW w AS (ORDER BY begat ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
    ) 
    , c AS (
    SELECT
        begat
      , endat
      , SUM((is_new)) OVER (ORDER BY begat) seq
    FROM b
    )
    SELECT
        MIN(begat) beg_at
      , MAX(endat) end_at
    FROM c
    GROUP BY seq
    


    1. エラーの修正方法:プラグイン「Aria」が原因で、XamppでMySQLが予期せずシャットダウンしました

    2. 統計データを保存するには、DECIMAL、FLOAT、またはDOUBLEが必要ですか?

    3. PHPとMySQLの合計から1、1、3、4などの順序でランクを出力

    4. 修正方法「プロシージャは、タイプ「ntext / nchar/nvarchar」のパラメータ「@statement」を予期しています。」 SQLServerのエラー