SQL查询以获取设置的时间段的平均值

时间:2011-06-23 16:20:22

标签: mysql math average

我有一个MySQL数据库,用于存储功率读数,每分钟添加一次读数。 (即每天1,440个读数)。

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

使用PHP我想从这些数据中生成一个图形,但我不希望图形上有1,440个点。我可能会选择将其分成15分钟(这将给我96分)。此外,我不想简单地采取每第15个值,因为这会产生误导性的结果。我想要做的是使用一个SQL查询,该查询在15分钟的块中返回数据,并将功率读数作为平均值。

输出可能如下所示:

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

是否有一个SQL函数可以为我执行此操作?或者我将不得不在我的PHP代码中执行此计算?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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)。

希望这有帮助。

答案 2 :(得分:0)

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

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