SQL按分钟平均值获取温度值

时间:2013-12-09 09:54:42

标签: mysql datetime average

我有一个带有以太网接口的微控制器,并连接了3个温度传感器。 温度数据被发送到运行脚本的另一台机器,该脚本通过传感器ID将值放入MySQL数据库。

温度值由微控制器每分钟发送45-50次。

我正在尝试使用图形工具获得一分钟明智的平均值,但我在弄清楚如何获得过去24小时的平均pr分钟时遇到了问题。

数据如下所示:

+----------+-----------------+---------------------+
| sensorID | sensorTempValue | sensorTimeStamp     |
+----------+-----------------+---------------------+
|        3 |             320 | 2013-12-09 09:38:00 |
|        2 |             156 | 2013-12-09 09:38:01 |
|        1 |             360 | 2013-12-09 09:38:02 |
|        3 |             320 | 2013-12-09 09:38:04 |
|        2 |             156 | 2013-12-09 09:38:05 |
|        1 |             360 | 2013-12-09 09:38:06 |
|        3 |             319 | 2013-12-09 09:38:08 |
|        2 |             156 | 2013-12-09 09:38:09 |
|        1 |             360 | 2013-12-09 09:38:10 |
|        3 |             319 | 2013-12-09 09:38:12 |
|        2 |             156 | 2013-12-09 09:38:13 |

...

sensorID是每个DS18x20数字传感器的ID,而sensorTempValue是它返回的原始数据,因此将该值除以16得到摄氏温度值。

SELECT sensorTimeStamp, sensorTempValue/16 
FROM (SELECT * 
      FROM temperatureData 
      WHERE sensorTimeStamp > DATE_SUB(now(), INTERVAL 1 DAY) 
      AND sensorID = 2 
      GROUP BY MINUTE(sensorTimeStamp)) 
m order by sensorTimeStamp

这是我最接近的,但这仍然不是整整23个小时。 我猜这可以通过分组等来完成。

1 个答案:

答案 0 :(得分:0)

我认为你正在寻找这样的东西:

select 
 sensorID,  
 DATE_FORMAT(sensorTimeStamp, '%Y-%m-%d %H:%i'),
 (SUM(sensorTempValue)/count(sensorTempValue))/16 
from temperatureData 
where now()-temperatureData.sensorTimeStamp < INTERVAL 1 DAY 
group by sensorID, DATE_FORMAT(sensorTimeStamp, '%Y-%m-%d %H:%i')