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

postgresqlの移動平均

    SQLフィドル

    select
        "date",
        shop_id,
        amount,
        extract(dow from date),
        case when
            row_number() over (order by date) > 3
            then
                avg(amount) OVER (
                    ORDER BY date DESC
                    ROWS BETWEEN 1 following AND 3 FOLLOWING
                )
            else null end
    from (
        select *
        from ro
        where extract(dow from date) = 4
    ) s
    

    OPのクエリの何が問題になっているのかは、フレームの仕様です。

    ROWS BETWEEN 0 PRECEDING AND 2 FOLLOWING
    

    それ以外は、私のクエリは、高価なウィンドウ関数を適用する前に木曜日をフィルタリングすることで、不要なコンピューティングを回避します。

    shop_idでパーティション化する必要がある場合は、明らかにpartition by shop_idを追加します。 両方の関数に、avg およびrow_number



    1. SQL Serverで、特定のテーブルに対してCREATE TABLEステートメントを生成するにはどうすればよいですか?

    2. MySQLクエリブラウザでクエリパラメータを設定するにはどうすればよいですか?

    3. Mysqlコネクタ-MultipleActiveResultSetsの問題

    4. MySQLへのバイナリデータの挿入(PreparedStatementなし)