Stack Overflow en español Asked by Jose Huerta on December 13, 2020
días, noches espero que me puedan ayudar con poco con lo siguiente, la idea es lograr agrupar los registros usando mysql promediando y tenerlo por rangos de 1 minuto, 5 minutos, 15 minutos, 30 minutos, 60 minuts etc.
Actualmente estoy trabajando con un proyecto de arduino e iot donde es un jardín inteligente este envía un registro sobre sus sensores cada 10 segundos a la base de datos todo el tiempo, tengo una plataforma escrita en laravel para poder leer esos datos y representarlos en gráficas basados en el promedio estoy intentando lo siguiente
un ejemplo de mi tabla sensor_data
id, sensor_id, value, created_at
1, 1, 20, 2020-05-05 16:00:23
2, 1, 23, 2020-05-05 16:00:33
3, 1, 25, 2020-05-05 16:00:43
4, 1, 23, 2020-05-05 16:00:53
5, 1, 20, 2020-05-05 16:01:03
y mi consulta para obtenter el promedio en intervalos de 1 minuto es la siguiente
SELECT sensor_id, ROUND(AVG(value)) as average, DATE_FORMAT(created_at, '%Y/%m/%d %H:%i')) as created FROM sensor_data WHERE value > 0 AND value < 1024 AND sensor_id=1 GROUP BY created ORDER BY created DESC
Y con esto obtengo el promedio de cada minuto, pero la duda aqui es que otra forma exise o me recomiendan para poder tener intervalos de 5, 15 o 30 minutos? ya que no puedo agruparlos con el created debido a que uso la fecha para separarlos.
Espero haberme explicado.
Te propongo algo así:
SELECT sensor_id, ROUND(AVG(value)) as average,
CONCAT(
DATE_FORMAT(created_at, '%Y/%m/%d %H:'),
ROUND(MINUTE(created_at)/15)*15
) as created
FROM sensor_data
WHERE value > 0 AND value < 1024 AND sensor_id=1
GROUP BY created ORDER BY created DESC;
De 00 a 15 te lo agrupa en 00, de 15 a 30 en 15 y así sucesivamente
Para 1, 5, 30 y 60, sustituye el 15 por estas cantidades
Answered by David JP on December 13, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP