SQL中的移动平均值

时间:2014-06-03 15:59:20

标签: mysql sql

我有一个MySQL数据库,耗电量超过20年。 我想查询一个月内每个月的平均耗电量。

例如,使用此数据库,

date        power_consumption
2014/03/30  30
2014/04/30  40
2014/05/30  50
2014/06/30  20

The result would be, from 2014/04

month       average_so_far_from_april_2014
2014/04     40.0
2014/05     45.0
2014/06     36.667

如果我无法在一个查询中实现此功能,那么我应该选择哪种查询来检索此任务的最有用数据? (我天真的方法是查询整个表并计算我的应用程序中的平均值。)

2 个答案:

答案 0 :(得分:1)

根据消费表加入子查询表,消费表获取消费表的唯一月份,并且年/月小于或等于子查询中的一个的连接条件使用AVG聚合根据年/月分组的表格中的功耗

这样的事情: -

SELECT consumption_month, 
  AVG(b.power_consumption)
FROM 
(
    SELECT DISTINCT DATE_FORMAT(`date`, '%Y%m') AS consumption_month FROM consumption_table a
) a
INNER JOIN consumption_table b
ON consumption_month >= DATE_FORMAT(b.`date`, '%Y%m')
WHERE b.`date` >= '2014/04/01'
GROUP BY consumption_month

SQL小提琴: -

http://www.sqlfiddle.com/#!2/16588/2

如果你每个月只有一条记录,你可以通过在不需要子查询的情况下对表进行连接来简化它。

答案 1 :(得分:0)

GROUP BY是针对这类问题的。对于GROUP BY子句的表达式的每个不同值计算平均值。

SELECT DATE_FORMAT(date, '%Y/%m'), AVG(power_consumption)
FROM table_name
WHERE date > ...
GROUP BY DATE_FORMAT(date, '%y/%m')
ORDER BY DATE_FORMAT(date, '%y/%m')

您可以获得每个月的平均值,DATE_FORMAT(date, '%y/%m')是年份和月份,格式为YYYY / MM

相关问题