我有一系列温度数据,每分钟收集一次并放入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命令。
答案 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);