0

私はこのようなテーブルを持っています。

    
    カウント| 日にち
    ------------------
     1 2012-01-01   
     4 2012-01-01   
     5 2012-01-02
    12 2012-01-03
     7 2012-01-04
     4 2012-01-05
    19 2012-01-06
     1 2012-01-07
     等...

過去4週間の各週の1週間あたりの平均カウントを計算する方法を探しています。

結果は次のようになります...

    
    平均| 年週
    ------------------
     3 201201   
     5 201202   
     6 201203
     1 201204
     11 201205
     3 201206
    18 201207
    12 201208
     等...

...ここで、各年の週は過去4年の週の週平均です。

週平均を取得するのは簡単ですが、過去4年間の平均を取得するにはどうすればよいですか?そして、どうすれば移動平均としてそれを行うことができますか?これをコードで行う方がいいですか?

4

1 に答える 1

0

アプリケーションのコードでこれを行うことは確かに可能ですが、本当にSQLで行う必要がある場合は、最初に週ごとに集計された結果のテーブルを作成し、それを結合して4週間の移動平均を取得できます。

そうすることで、平均を保存する代わりに、合計と日数を保存します(年の最初または最後の週には、7日がない場合があります-エッジケースを考えます)。そうすれば、平均の分母が異なる場合に、重み付けされていない平均を計算することを回避できます。

たとえば、yearweek、sumcount、numdaysのフィールドを持つテーブル「weekly_results」があるとします。これで、過去4週間に自己参加して合計とカウントを取得し、そこから平均を計算できます。

SELECT yearweek, sum_cnt/sum_dys as avg_moving_4wk
FROM (
    SELECT a.yearweek, sum(b.sumcount) as sum_cnt, sum(b.numdays) as sum_dys
    FROM weekly_results a
        join weekly_results b
        on a.yearweek - b.yearweek <4 and a.yearweek - b.yearweek >=0
    GROUP BY a.yearweek
) t1
GROUP BY yearweek
于 2012-07-25T01:55:40.623 に答える