2016-03-07 92 views
0

,所以我有100的的数千行的,像这样的表:MySQL的平均每24小时1个月

+--+----------+-------------------+ 
|ID|metervalue |datetime   | 
|1 |10  |2016-02-23 01:00 | 
|2 |20  |2016-02-23 02:00 | 
|3 |5   |2016-02-23 03:00 | 
|... |...  |...    | 
|x |x   |2016-02-24 01:00 | 
|x |x   |2016-02-24 02:00 | 
|x |x   |2016-02-24 03:00 | 
|... |...  |...    | 
|x |x   |2016-03-01 01:00 | 
|x |x   |2016-03-01 02:00 | 
|x |x   |2016-03-01 03:00 | 
+--+----------+-------------------+ 

因此,有采取每隔一小时多,很多天有些抄表。

现在我需要获取图形的数据。小时图数据很简单,因为我可以按原样查询数据,但对于“每月”数据,我需要从一个月的持续时间查询所有行,以便每24小时平均为一行。

所以30行中的一行(假设月份有30天)应该包含24小时平均为1天。

我试过这个解决方案,但我会想它的工作没有奏效:Average of data for every 5 minutes in the given times

我不认为GROUP BY在这个问题的答案,例如工作,因为我不想平均,比如说,每天每五小时,但我想平均每天的24小时来弥补一天。

+3

GROUP BY DATE(日期时间)? – Strawberry

回答

1

你仍然会GROUP BY,但你做什么用其无视数据的时间部分,像这样的DATE()函数返回:

SELECT DATE(a.datetime), AVG(a.metervalue) 
FROM MyInterestingTable a 
GROUP BY DATE(a.datetime) 
+0

DATE函数与DAY函数不同,它似乎不起作用? – Piwwoli

+0

根据每个文档它返回一个月的数字日期,例如:DAY(2016-02-24)返回24. DAY(2011-05-24)也返回24.正如你所看到的,这不是你想要描述的场景。在这种情况下,DATE()只会删除时间部分,这正是您想要的。 –

+0

啊!所以这就是问题所在,几个月和几年被DAY功能所忽视!谢啦! – Piwwoli