Ver Mensaje Individual
  #7 (permalink)  
Antiguo 17/10/2011, 13:22
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta sobre medias móviles

Hola de nuevo IsmaPolo...

Si entendí correctamente, creo que no hay necesidad de hacer 5 subconsultas como comenta el compañero jurena, a reserva de que pruebes y nos comentes, pero primero veamos si estoy entendiendo bien... En mi post pasado de pedía que nos pusieras algunos datos de ejemplo, pero solo pusiste la salida (y me es imposible saber a partir de qué datos obtuviste el 7.10 y los demás datos) así es que voy a poner algunos datos de ejemplo por mi cuenta. Voy a suponer que tienes la siguiente información en tu tabla:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+---------+------------+------+
  3. | ID   | LUGAR   | FECHA      | TMAX |
  4. +------+---------+------------+------+
  5. |    1 | lugar 1 | 2011-10-01 |   10 |
  6. |    2 | lugar 1 | 2011-10-02 |   20 |
  7. |    3 | lugar 1 | 2011-10-03 |   30 |
  8. |    4 | lugar 1 | 2011-10-04 |   40 |
  9. |    5 | lugar 1 | 2011-10-05 |   50 |
  10. |    6 | lugar 1 | 2011-10-06 |   60 |
  11. |    7 | lugar 1 | 2011-10-07 |   70 |
  12. |    8 | lugar 1 | 2011-10-08 |   80 |
  13. |    9 | lugar 1 | 2011-10-09 |   90 |
  14. |   10 | lugar 1 | 2011-10-10 |  100 |
  15. +------+---------+------------+------+
  16. 10 rows in set (0.00 sec)

si entendí bien, los promedios se deberían calcular así:

Código:
 
2011-10-01 = 10 / 1 = 10
(Pues no hay ninguna temperatura con fecha anterior)
 2011-10-02 = 10 + 20 / 2 = 15
(Pues existe una temperatura con fecha anterior)
 2011-10-03 = 10 + 20 + 30 / 3 = 20
(Pues existe dos temperatura con fecha anterior)
 2011-10-04 = 10 + 20 + 30 + 40 / 4 = 25
(existe 4 temperatura con fecha anterior)
 2011-10-05 = 10 + 20 + 30 + 40 + 50 / 5 = 30
(existe 5 temp. con fecha anterior)
 2011-10-06 = 20 + 30 + 40 + 50 + 60 / 5 = 40
(aunque existen 6 temp con fecha anterior, solo se toman las últimas 5, 
pues con respecto a la del primer día ya han transcurrido más de 6 días)
...
Si estoy en lo correcto y esto es lo que quieres obtener podrías hacerlo así:

Código MySQL:
Ver original
  1. mysql> SELECT fecha, (
  2.     -> SELECT AVG(tmax)
  3.     -> FROM tabla T2 WHERE T2.fecha <= T1.fecha AND
  4.     -> DATEDIFF(T1.fecha, T2.fecha) < 5) 5dayMovAvg
  5.     -> FROM tabla T1;
  6. +------------+------------+
  7. | fecha      | 5dayMovAvg |
  8. +------------+------------+
  9. | 2011-10-01 |    10.0000 |
  10. | 2011-10-02 |    15.0000 |
  11. | 2011-10-03 |    20.0000 |
  12. | 2011-10-04 |    25.0000 |
  13. | 2011-10-05 |    30.0000 |
  14. | 2011-10-06 |    40.0000 |
  15. | 2011-10-07 |    50.0000 |
  16. | 2011-10-08 |    60.0000 |
  17. | 2011-10-09 |    70.0000 |
  18. | 2011-10-10 |    80.0000 |
  19. +------------+------------+
  20. 10 rows in set (0.02 sec)

Dale un vistazo para ver si es lo que requieres, y prueba también la solución de jurena.

Saludos
Leo.