在SQL中计算移动平均值

3

我想从MySQL列中计算12个月的移动平均值。这些数据代表着时间序列的电力测量值,它是一个相当大的数据集(多年以来每隔10分钟记录一次)。最好能够实现高性能的查询,但速度是我之后可以解决的问题。

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

以下查询可以给出每个月的总活跃数:
SELECT YEAR(DTE) AS year, MONTH(DTE) AS month, SUM(Active)/6 as total FROM saturne s GROUP BY YEAR(DTE), MONTH(DTE)

以下查询给出了特定月份和年份(比如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得到总能量)

1个回答

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接