Hola:
Muchas gracias Leo por tus respuestas.
Si que tengo los indices creados en las tablas, cuando estuve mirando mysql vi que era una de las cosas que ayudaban a mejorar el rendimiento, aunque la fecha no la tengo como indice, no se si en este caso ayudaria.
Creo que con SELECT EXPLAIN analiza un poco el rendimiento del select, asi que probare con ambos y ya comento.
Si no con el tiempo que me tarda con los datos que tengo ya puedo ver cual de los query va tardando menos.
Por el lado de las fechas, tu solución de ponerla segun la hora esta guay, pero queria que pudiese ser un poco elegible, creo que en sensores es una buena idea darlo cada 5 min o 30 min.
Mirando un poco he llegado a la siguiente solución:
Código:
SELECT
CONCAT(DATE_FORMAT(fechaHora, '%Y-%m-%d'), ' ', SEC_TO_TIME(FLOOR(TIME_TO_SEC(fechahora)/(30*60))*30*60)) AS fechanormalizada,
AVG( IF( atributo = 'Media', valor, NULL ) ) media,
AVG( IF( atributo = 'Maxima', valor, NULL ) ) maxima,
AVG( IF( atributo = 'Minima', valor, NULL ) ) minima
FROM `datos recibidos` WHERE `idMaquina`='2' AND `idSensor`='1'
GROUP BY idMaquina, idSensor, fechanormalizada
Como ves, saco el numero de segundos que tiene la fecha, divido entre el numero de minutos con el que quiero el rango, redondeo al entero menor, multiplico por el rango, y rearmo la fecha. Despues lo agrupo por este dato.
Tengo que comprobarlo un poco, pero así funciona. El select en el phpAdmin me tarda 0.0846 con 9636 datos agrupando hasta 275 (tengo uno cada 5 min aprox)
Funcionar funciona, pero me parece un select monstruoso,
.
Bueno, muchas gracias
Jonatan Cayón