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

Postgresの連続する列の「実行」をクエリする

    これがRECURSIVECTEソリューションです。 (アイランドアンドギャップの問題は、当然、再帰CTEに役立ちます)

    WITH RECURSIVE runrun AS (
        SELECT event_id, event_time
        , event_time - ('30 sec'::interval) AS low_time
        , event_time + ('30 sec'::interval) AS high_time
        FROM table1
        UNION
        SELECT t1.event_id, t1.event_time
        , LEAST ( rr.low_time, t1.event_time - ('30 sec'::interval) ) AS low_time
        , GREATEST ( rr.high_time, t1.event_time + ('30 sec'::interval) ) AS high_time
        FROM table1 t1
        JOIN runrun rr ON t1.event_time >= rr.low_time
                      AND t1.event_time < rr.high_time
        )
    SELECT DISTINCT ON (event_id) *
    FROM runrun rr
    WHERE rr.event_time >= '2011-01-01 00:00:15'
    AND rr.low_time <= '2011-01-01 00:00:15'
    AND rr.high_time > '2011-01-01 00:00:15'
        ;
    

    結果:

     event_id |     event_time      |      low_time       |      high_time      
    ----------+---------------------+---------------------+---------------------
            2 | 2011-01-01 00:00:15 | 2010-12-31 23:59:45 | 2011-01-01 00:00:45
            3 | 2011-01-01 00:00:29 | 2010-12-31 23:59:45 | 2011-01-01 00:01:28
            4 | 2011-01-01 00:00:58 | 2010-12-31 23:59:30 | 2011-01-01 00:01:28
    (3 rows)
    


    1. Python、9タプルUTC日付をMySQL日時形式に変換

    2. AndroidでMySQLへのプールされた接続を確立する

    3. sequelizeを使用するNodejsは、サーバーの起動後にmysqlワークベンチにテーブルを作成できませんでした

    4. C#Oracleマネージド接続でのKerberos