我想从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得出总能量)
最佳答案
尝试:
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)
关于mysql - 在SQL中计算移动平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9784027/