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

SQLServerでの7日間の移動平均のSQLクエリ

    試してみてください:

    select x.*,
           avg(dailyusage) over(partition by productid order by productid, date rows between 6 preceding and current row) as rolling_avg
      from (select productid, date, sum(usagecount) as dailyusage
              from tbl
             group by productid, date) x
    

    フィドル:

    http://sqlfiddle.com/#!6/f674a7/4/0

    本当に必要なのが過去1週間の合計である場合は、「avg(dailusage)over ....」を(平均ではなく)合計に置き換えます。タイトルでは、平均が必要だと言いますが、後で合計が必要だと言います。クエリはそれ以外は同じである必要があるため、実際に必要なものを使用してください。

    Gordonが指摘したように、これは基本的に、製品が使用された過去6日間の平均であり、テーブルにその製品の行がなかったために行がない日がある場合は、過去6日間よりも長くなる可能性があります。まったく使用されていません。これを回避するには、日付テーブルと商品テーブルを使用できます。



    1. Postgresqlの複数の列でWHEREINを実行する

    2. SQLServerのXMLドキュメントでノードの順序を検索する

    3. パラメータ化されたクエリが、パラメータ化されていないクエリと比較して非常に遅いクエリプランを生成するのはなぜですか

    4. T-SQLで日付から年を取得する方法