3

5日間の移動平均を計算しようとしています。そして、日付の間にギャップがある場合を除いて、すべてが正常に機能します。ギャップがある場合、欠落している日付 (-s) の値をゼロに設定して、正しい移動平均を表示する必要があります。

これが私のテーブル (orders_total) で、1/7/13 の日付がなく、それが問題を引き起こしていることがわかります。

orders_id    value    date
1            199      1/1/13 0:00
2            199      1/2/13 0:00
3            199      1/3/13 0:00
4            199      1/4/13 0:00
5            249      1/5/13 0:00
6            199      1/6/13 0:00
7            199      1/8/13 0:00
8            199      1/9/13 0:00
9            199      1/10/13 0:00
10           199      1/11/13 0:00
11           199      1/12/13 0:00
12           199      1/13/13 0:00

欠損日付 1/7/13 の値がゼロに設定されている場合、(探している) 正しい 5 日間の移動平均は次のようになります。

199
199
199
199
209
209
169.2
169.2
169.2
159.2
159.2
199
199

これは私が使用しているコードであり、日付間にギャップがある場合、正しい移動平均を表示していません:

    SELECT ot1.value, ot1.date,
    (SELECT SUM(ot2.value) / COUNT(ot2.value)
    FROM orders_total AS ot2 WHERE DATEDIFF(ot1.date, ot2.date) BETWEEN 0 AND 4) AS '5dayMovingAvg'
    FROM orders_total AS ot1 ORDER BY ot1.date";
4

2 に答える 2

0

常に 5 日になることがわかっている場合、なぜ COUNT(ot2.value) で割るのでしょうか? エッジ ケースを処理しようとしている場合を除き、その場合は通常のケースとは異なる方法でエッジ ケースを処理します。

于 2013-05-20T12:01:51.240 に答える