Ver Mensaje Individual
  #4 (permalink)  
Antiguo 21/06/2012, 08:24
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: problema con consulta

Hola Mega0079:

Mucho ojo, los rangos que estás manejando NO SON MUTUAMENTE EXCLUYENTES, debes manejar condiciones tipo >= o en su defecto cambiar los valores de referencia... Hace tiempo me tocó hacer algo parecido aquí en el trabajo. La solución por la que optamos fue crear una tabla catálogo con los intervalos que nos interesaban, especificando los límites inferior y superior para cada caso. Una vez que tuvimos esta tabla, sólo tuvimos que hacer un INNER JOIN y una agrupación, es decir, sería algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM llamadas;
  2. +--------+----------+----------+
  3. | llamid | telefono | hora     |
  4. +--------+----------+----------+
  5. |      1 | 55555    | 10:30:00 |
  6. |      2 | 55555    | 10:20:00 |
  7. |      3 | 55555    | 10:25:00 |
  8. |      4 | 55555    | 11:30:00 |
  9. |      5 | 55555    | 11:20:00 |
  10. |      6 | 55555    | 11:25:00 |
  11. +--------+----------+----------+
  12. 6 rows in set (0.02 sec)
  13.  
  14. mysql> SELECT * FROM intervalos;
  15. +-------------+-----------+-----------+
  16. | intervaloId | limiteInf | limiteSup |
  17. +-------------+-----------+-----------+
  18. |           1 | 10:00:00  | 10:29:59  |
  19. |           2 | 10:30:00  | 10:59:59  |
  20. |           3 | 11:00:00  | 11:29:59  |
  21. |           4 | 11:30:00  | 11:59:59  |
  22. +-------------+-----------+-----------+
  23. 4 rows in set (0.00 sec)
  24.  
  25. mysql> SELECT i.limiteInf, i.limiteSup, COUNT(*) total
  26.     -> FROM llamadas l
  27.     -> INNER JOIN intervalos i
  28.     ->   ON l.hora BETWEEN i.limiteInf AND i.limiteSup
  29.     -> GROUP BY i.limiteInf, i.limiteSup
  30.     -> ORDER BY i.limiteInf;
  31. +-----------+-----------+-------+
  32. | limiteInf | limiteSup | total |
  33. +-----------+-----------+-------+
  34. | 10:00:00  | 10:29:59  |     2 |
  35. | 10:30:00  | 10:59:59  |     1 |
  36. | 11:00:00  | 11:29:59  |     2 |
  37. | 11:30:00  | 11:59:59  |     1 |
  38. +-----------+-----------+-------+
  39. 4 rows in set (0.00 sec)

Observa que los valores de la tabla SI SON MUTUAMENTE EXCLUYENTES (es decir, no se mezclan intervalos en más de una categoría). La consulta te regresaría el total de llamadas para cada intervalo...

Saludos
Leo.