2011-06-23 72 views
4

我有一个MySQL数据库,用于存储功率读数,每分钟添加一次读数。 (即每天1,440个读数)。SQL查询获得设定的时间段的平均值

time  power 
----  ----- 
00:00:00 346 
00:01:00 352 
00:02:00 247 

使用PHP我想从这个数据产生一个图表,但我不想在图表上得到1,440个点。我可能会选择将其分成15分钟的大块(这会给我96分)。另外,我不想简单地拿走每一个十五分的价值,因为这会带来令人误解的结果。我想要做的就是使用一个SQL查询,它在15分钟的时间内返回数​​据,并以平均值的形式给出功率读数。

输出可能是这个样子:

starttime avgpower 
--------- -------- 
00:00:00   342 
00:15:00   490 
00:30:00   533 

是否有一个SQL函数,会为我做到这一点?或者我将不得不在我的PHP代码中执行此计算?

回答

2

这里是你的查询:

SELECT STR_TO_DATE(CONCAT(DATE_FORMAT(`time`, '%H'), ':', (FLOOR(DATE_FORMAT(`time`, '%i')/15) * 15), ':00'), '%H:%i:%s') `starttime`, AVG(`power`) `avgpower` 
FROM `tablea` 
GROUP BY `starttime`; 

请随时根据自己的模式来代替表(tablea)和列(timepower)的名字。

希望这会有所帮助。

+0

完美的谢谢。 – Bryan

2

您可能可以按分钟/ 4的四舍五入值进行分组,然后选择功率读数字段的平均值。您可能更喜欢使用发言权函数来舍弃分钟数。

0

有同样的问题。正如Don Kirkby指出的,我用它解决了这个问题:

SELECT time, AVG(power) AS avgpower, ROUND(UNIX_TIMESTAMP(time)/(15*60)) AS timekey 
FROM table 
GROUP BY timekey