选择2个日期和平均每小时输出之间的数据

时间:2015-11-17 15:12:39

标签: mysql sql

我有一系列温度数据,每分钟收集一次并放入MySQL数据库。我想编写一个查询来选择过去24小时的所有温度,然后将它们分组并将它们平均为几小时。这可以通过SQL命令吗?

我认为这是在两个日期/时间之间选择所有记录的情况,但这就是我被卡住了。

数据示例:

$(this).removeClass('input-validation-error');

需要的输出/结果

ID    Temp      Timestamp
3922  22        2015-11-17 14:12:23
3923  22        2015-11-17 14:13:23
3924  22.05     2015-11-17 14:14:23
3925  22.05     2015-11-17 14:15:23

我希望你可以提供帮助,因为我完全迷失了SQL命令。

2 个答案:

答案 0 :(得分:2)

尝试此查询

SELECT
   AVG(Temp) AS Temp,
   DATE_FORMAT(Timestamp, '%Y-%m-%d %H:00:00') AS Time
FROM Table
WHERE DATE_FORMAT(Timestamp, '%Y-%m-%d %H:00:00') >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY), '%Y-%m-%d %H:00:00')
GROUP BY DATE_FORMAT(Timestamp, '%Y-%m-%d %H:00:00')

答案 1 :(得分:0)

是的,这在SQL中非常可行。最简单的方法就是:

select hour(timestamp), avg(temp)
from t
where timestamp >= date_sub(now(), interval 1 day)
group by hour(timestamp);

这并不完美,因为第一个和最后一个小时的边界来自不同的一天。所以,这更像是你想要的输出:

select date_add(date(timestamp), interval hour(timestamp) hour) as `time`,
       avg(temp)
from t
where timestamp >= date_sub(now(), interval 1 day)
group by date_add(date(timestamp), interval hour(timestamp) hour);