2015-11-17 2 views
1

У меня есть серия данных о температуре, которые собираются каждую минуту и ​​помещаются в базу данных MySQL. Я хочу написать запрос, чтобы выбрать все температуры в течение последних 24 часов, затем группировать и усреднять их в часах. Возможно ли это с помощью команды SQL?Выберите данные между двумя датами и средним почасовым выводом

Я думаю, что это случай выбора всех записей между двумя датами/временами, но это то, что я застрял.

данных Пример:

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 

Необходим выход/Результат

Temp Time 
22  2015-11-17 14:00:00 
23  2015-11-17 15:00:00 
23  2015-11-17 16:00:00 
22.05 2015-11-17 17:00:00 

Я надеюсь, что вы можете помочь, как я полностью потерял с помощью команд SQL.

ответ

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') 
+0

Спасибо, отлично работает :) – Tony

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); 
Смежные вопросы