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

1時間ごとに、時間の範囲にわたって値を集計します

    カスタムのウィンドウ関数フレーム これを驚くほどシンプルにします :

    SELECT ts
          ,avg(val) OVER (ORDER BY ts
                          ROWS BETWEEN CURRENT ROW AND 7 FOLLOWING) AS avg_8h
    FROM tbl;
    

    sqlfiddleのライブデモ。

    各平均のフレームは、現在の行に次の7を加えたものです。これは、1時間ごとに1つの行があることを前提としています。あなたのサンプルデータはそれを暗示しているようですが、あなたは指定しませんでした。

    現状では、avg_8h 決勝戦(tsによる) )最後の行の値がそれ自体の平均と等しくなるまで、セットの7行がより少ない行で計算されます。特別な場合の対処方法を指定していません。



    1. SpringJDBC-最後に挿入されたID

    2. between句を使用するSQLを最適化する

    3. ã、š、é、ë、ú、ü、í、žを使用したPhp/MySql配列検索

    4. OracleのNEXT_DAY()関数