簡體   English   中英

SQL中的移動平均線

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM