Estimados amigos:
Tengo datos de temperatura de varios meses de un conjunto de estaciones meteorológicas.
La estructura de la base de datos es la siguiente:
| ID | LUGAR | FECHA | TMAX|
donde: FECHA es la fecha del día
TMAX: es el dato de la temperatura
LUGAR: es el lugar donde se encuentra la estación
Mi idea es agrupar las medias por día de ese conjunto de datos y luego aplicar una media móvil de 5 días para ver la tendencia de la temperatura durante esos meses.
Pues bien, agrupar por días es algo que mi ordenador hace muy rápido (0.03 seg) pero cuando tiene que hallar las medias móviles, entonces ya se eterniza y le cuesta nada menos que 35 segundos. No quiero imaginarme lo que le debe costar hacerlo online.
La consulta que utilizo para agrupar los registros por días y hallar la media móvil es la siguiente:
SELECT a.FECHA, format(sum(b.TMAX)/count(b.TMAX),2) 5dayMovAvg
FROM TABLA a
JOIN TABLA b on datediff(a.FECHA,b.FECHA) BETWEEN 0 AND 4
WHERE a.FECHA BETWEEN '2010-12-15' AND '2011-03-31'
GROUP BY a.FECHA;
Y la verdad que no entiendo esta lentitud, ya que para calcular la media móvil de un día, sólo tiene que sumar los datos de las temperaturas de los 5 días anteriores y dividirlo entre 5.
¿Hay alguna forma más eficiente de hacer esto?
Saludos a todos y gracias!