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

任意の時間間隔の集計を取得します

    15分間隔で、例に基づいて作成します。

    SELECT DISTINCT
         , date_trunc('hour', t) AS h
         , floor(EXTRACT(minute FROM t) / 15) AS m15
         , min(price) OVER w
         , max(price) OVER w
         , first_value(price) OVER w
         , last_value(price) OVER w
    FROM   ticker
    WINDOW w AS (PARTITION BY date_trunc('hour', t)
                            , floor(extract(minute FROM t) / 15));
    

    5分間も機能します。

    より一般的なソリューション 任意の期間にわたる任意の定期的な時間間隔:

    WITH x AS (
        SELECT t1, t1 + interval '5min' AS t2
        FROM   generate_series(timestamp '2012-07-18 00:00'
                             , timestamp '2012-07-18 23:55'
                             , interval '5 min') AS t1
        )
    SELECT DISTINCT ON (1)
           x.t1
         , min(price)         OVER w
         , max(price)         OVER w
         , first_value(price) OVER w
         , last_value(price)  OVER w
    FROM   x
    JOIN   ticker y ON y.t >= x.t1  -- use LEFT JOIN to include empty intervals
                   AND y.t <  x.t2  -- don't use BETWEEN
    WINDOW w AS (PARTITION BY x.t1)
    ORDER  BY x.t1;
    

    詳細な説明付きの関連回答:




    1. Laravel5でライブでMySQLに接続できません

    2. oracle systimestamp(sysdate)からミリ秒

    3. 単一のクエリを使用して、複数のテーブルからプルします

    4. 1つのmysql_queryに2つのクエリを入れるにはどうすればよいですか?