2016-11-03 5 views
0

У меня есть таблица, которая обновляется каждые 10 секунд с данными. Мне нужно получить среднее значение в течение 10 минут, в течение 24 часов на конкретную дату.MySQL составляет 10 минут в течение 24 часов

Я пробовал делать это и увеличивать время на 10 минут через php.

select AVG(active_energy), date_time from energy_readings where date_time between "2016-11-02 00:00:00" and "2016-11-02 00:00:00"+ INTERVAL 10 MINUTE; 

, а затем

select AVG(active_energy), date_time from energy_readings where date_time between "2016-11-02 00:10:00" and "2016-11-02 00:10:00"+ INTERVAL 10 MINUTE; 

в течение 24 часов.

Это работает, но на моем сервере базы данных требуется слишком много нагрузки.

Есть ли один запрос mysql, который я могу использовать, который даст мне 10-минутные средние значения в течение 24 часов в течение определенного дня?

ответ

1

Вот один метод, чтобы получить строку за каждые 10 минут данных:

select date(date_time), hour(date_time), floor(minute(date_time)/6), 
     avg(active_energy) 
from energy_readings 
where date_time >= '2016-11-02' and datetime < '2016-11-03' 
group by date(date_time), hour(date_time), floor(minute(date_time)/6) 
order by min(date_time); 
+0

«TRUNC» не доступен в MySQL к сожалению. Пробовал использовать дату (минута (date_time)/6). Но это не сработало. – NoMadic

+1

Я думаю, вы можете использовать оператор 'DIV' в этом случае следующим образом:' ... group by date (date_time), hour (date_time), minute (date_time) DIV 6 ... ' @NoMadic – 1000111

+1

@NoMadic. , , К сожалению. Правильной функцией является 'floor()'. –