4

mysqlクエリでの移動平均の推定に関するいくつかの投稿を読んでいますが、平均を計算したい列がテーブルに含まれていないため、私の状況は少し難しいようです。各グループの行数を数え、そのグループの移動平均を提示する必要があります。

私は基本的に、テーブルに関連性のある列を 1 つだけ持っています。それは DATETIME 列です。テーブルには、同じ日付の複数の行を含めることができます。テーブルを YEARWEEK でグループ化し、各 YEARWEEK グループの行数を COUNT(*) したいと考えています。これは簡単です。難しいのは、さらに 4 週間の移動平均を計算することです。

+-------------+
| DatoLagtTil |
+-------------+
| 2012-11-01  |
| 2012-10-25  |
| 2012-10-25  |
| 2012-10-11  |
| 2012-10-04  |
| ...         |
| ...         |
| ...         |
| ...         |
+-------------+

これは私が作成しようとしている出力テーブルです。4 週間 (YEARWEEK) の移動平均は難しい部分です (注: 以下の例は、上記のサンプル データに基づいていません)。

+------------+------------+-----------+
| YEARWEEK   | COUNT      | m_average |
+------------+------------+-----------+
| 201201     |     5      |     5     |
| 201202     |     10     |     7.5   |  
| 201203     |     5      |     6.6   |
| 201204     |     15     |     8.8   | 
| 201205     |     10     |     10    |
| 201206     |     5      |     8.8   |
| 201207     |     5      |     8.8   |
+------------+------------+-----------+

移動平均の計算方法を説明しているいくつかの優れた情報源を見つけましたが、私の場合はそれらを機能させることができません。皆さんが助けてくれることを願っています。

ありがとう

- -ステータスアップデート - -

この質問を投稿してから、いくつかの解決策を試しています。近づいてきた気がしますが、まだ何か本質的なものが欠けています。

以下のクエリではエラーは発生しませんが、すべての YEARWEEK グループで Count(k.DatoLagtTil) と同じ AVG(cnt) が高すぎます...これは WHERE 句と関係があると思います。使ってる

SELECT YEARWEEK(k.DatoLagtTil), COUNT(k.DatoLagtTil), AVG(cnt)
  FROM  Kunder_db k, (SELECT COUNT(*) AS cnt
          FROM Kunder_db
         WHERE YEARWEEK(DatoLagtTil) BETWEEN YEARWEEK(DatoLagtTil) - 3 AND YEARWEEK(DatoLagtTil)
        GROUP BY YEARWEEK(DatoLagtTil)) x
GROUP BY YEARWEEK(k.DatoLagtTil)
4

2 に答える 2

2

適切な範囲基準を使用して、カウントクエリをテーブルに再度結合するだけです。

SELECT   t.yearweek,
         t.count,
         COUNT(*) / 4 AS m_average

FROM     my_table JOIN (
  SELECT   YEARWEEK(DatoLagtTil) AS yearweek,
           COUNT(*) AS count
  FROM     my_table
  GROUP BY yearweek
) t ON t.yearweek BETWEEN YEARWEEK(DatoLagtTil)
                      AND YEARWEEK(DatoLagtTil + INTERVAL 3 week)

GROUP BY t.yearweek

sqlfiddleでそれを参照してください。

于 2012-11-10T22:10:11.273 に答える