Ver Mensaje Individual
  #9 (permalink)  
Antiguo 25/06/2012, 11:39
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Crear dos columnas dependiendo de los datos de una

Hola de nuevo:

Considero que es pertinente que definas también tu campo fechaHora como índice, ya que esta está relacionada directamente con el criterio de agrupación... con respecto a los intervalos, creo que la mejor opción es la de crear una tabla de intervalos, como lo hice en el ejemplo que te puse de ejemplo... Aquí te ahorrarías el tiempo del cálculo y creo que el INNER JOIN sería más rápido que hacer el cálculo:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +----------+-------+---------------------+
  3. | atributo | Valor | FechaHora           |
  4. +----------+-------+---------------------+
  5. | Media    |  10.0 | 2012-06-18 17:40:00 |
  6. | Media    |  20.0 | 2012-06-18 17:40:12 |
  7. | Media    |  30.0 | 2012-06-18 17:45:34 |
  8. | Media    |  40.0 | 2012-06-18 18:00:00 |
  9. | Media    |  50.0 | 2012-06-18 18:59:59 |
  10. +----------+-------+---------------------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> SELECT * FROM intervalos;
  14. +-------------+-----------+-----------+
  15. | intervaloId | limiteInf | limiteSup |
  16. +-------------+-----------+-----------+
  17. |           1 | 17:40:00  | 17:44:59  |
  18. |           2 | 17:45:00  | 17:49:00  |
  19. |           3 | 18:00:00  | 18:59:59  |
  20. +-------------+-----------+-----------+
  21. 3 rows in set (0.00 sec)
  22.  
  23. mysql> SELECT
  24.     ->   T.atributo, SUM(T.valor), I.limiteInf, I.limiteSup
  25.     -> FROM tabla T
  26.     ->   INNER JOIN intervalos I
  27.     ->     ON TIME(T.fechaHora) BETWEEN i.limiteInf AND i.limiteSup
  28.     -> GROUP BY T.Atributo, DATE(fechaHora), I.limiteInf, I.limiteSup;
  29. +----------+--------------+-----------+-----------+
  30. | atributo | SUM(T.valor) | limiteInf | limiteSup |
  31. +----------+--------------+-----------+-----------+
  32. | Media    |         30.0 | 17:40:00  | 17:44:59  |
  33. | Media    |         30.0 | 17:45:00  | 17:49:00  |
  34. | Media    |         90.0 | 18:00:00  | 18:59:59  |
  35. +----------+--------------+-----------+-----------+
  36. 3 rows in set (0.01 sec)

Haz también la prueba... independientemente que no sea la mejor opción, te servirá para practicar un poco y estoy seguro que en un futuro le podrás encontrar utilidad. Cuando pruebes, recuerda también definir indices en tu tabla de intervalos para los límites.

Saludos
Leo.