[英]Moving average in 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
如果我無法在一個查詢中實現此目的,那么應該使用哪個查詢來檢索此任務最有用的數據? (我的幼稚方法是查詢整個表並計算應用程序中的平均值。)
將子查詢表與消耗表聯接,該消耗表從消耗表中獲得唯一的月份,聯接條件是年/月小於或等於子查詢中的一個/月,並在子查詢上使用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
如果您每月只有一條記錄,則可以通過僅對自身進行表聯接而無需子查詢來進一步簡化記錄。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.