2012-03-20 16 views
3

MySQLの列から12ヶ月の移動平均を計算したいとします。データは時系列の電力測定を表し、大規模なデータセットです(数十年間10分ごと)。高性能のクエリは素晴らしいかもしれませんが、スピードは後で解決することができます。SQLの移動平均の計算

DTE     Active 
2012-1-3 00:10  500 
2012-1-3 00:20  520 
... etc 

次のクエリは私に毎月のActive合計を与える:

SELECT YEAR(DTE) AS year, MONTH(DTE) AS month, SUM(Active)/6 as total FROM saturne s GROUP BY YEAR(DTE), MONTH(DTE) 

次のクエリは私に与えられた年と月のActive移動平均を与える - 2011年10月

SELECT SUM(Active)/6 AS average FROM saturne 
WHERE (YEAR(DTE) = 2011 AND MONTH(DTE) <= 10) OR (YEAR(DTE) = 2010 AND MONTH(DTE) > 10) 
を言います

しかし、次の列に月間合計と12ヶ月移動平均を返すクエリを生成したいと思います。

year  month  total  average 
2012  2   701474  9258089 
2012  1   877535  9386664 
... etc 

(6倍、データが10分ごとに記録された瞬時電力を表しているため、6で合計を除算する総エネルギーを与えている)

答えて

5

試行:

SELECT YEAR(GDTE) AS year, 
     MONTH(GDTE) AS month, 
     SUM(case when i=0 then Active end)/6 as total, 
     SUM(Active)/(MAX(i+1)*6) as avg 
FROM 
(select s.*, DATE_ADD(DTE, INTERVAL m.i MONTH) GDTE, m.i 
FROM saturne s 
cross join (select 0 i union select 1 union select 2 union select 3 union 
      select 4 union select 5 union select 6 union select 7 union 
      select 8 union select 9 union select 10 union select 11) m 
) sq 
WHERE GDTE <= curdate() 
GROUP BY YEAR(GDTE), MONTH(GDTE)