У меня есть таблица, которая обновляется каждые 10 секунд с данными. Мне нужно получить среднее за 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 часа в течение определенного дня?
Вот один способ получить строку для каждых 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);
Других решений пока нет …