Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

problema con consulta

Estas en el tema de problema con consulta en el foro de Mysql en Foros del Web. tengo una tabla de llamdas tipo llamid telefono hora 1------55555----10:30:00 2------55555----10:20:00 3------55555----10:25:00 4------55555----11:30:00 5------55555----11:20:00 6------55555----11:25:00 y quiero ver cuantas llamdas se hicieron en un intevalo ...
  #1 (permalink)  
Antiguo 20/06/2012, 16:10
 
Fecha de Ingreso: agosto-2008
Mensajes: 272
Antigüedad: 16 años, 2 meses
Puntos: 1
problema con consulta

tengo una tabla de llamdas tipo

llamid telefono hora
1------55555----10:30:00
2------55555----10:20:00
3------55555----10:25:00
4------55555----11:30:00
5------55555----11:20:00
6------55555----11:25:00


y quiero ver cuantas llamdas se hicieron en un intevalo de tiempo por ejemplo que me liste

de 10:25:00 a 10:30:00 se hicieron 3 llamadas y son estas
55555----10:30:00
55555----10:20:00
55555----10:25:00
de 11:25:00 a 12:30:00 se hicieron 3 llamadas y son estas
55555----11:30:00
55555----11:20:00
55555----11:25:00

intente hacerlo con

select count(*),* from tabla where hora<10:30:00 and hora>10:30:00
union
select count(*),* from tabla where hora<11:30:00 and hora>11:30:00


pero debo de revisar intervalos de cada 30 mins en todo el dia entonces tengo una sentencia de como 50 lineas, pdre reducirla ,muchas gracias!!
  #2 (permalink)  
Antiguo 20/06/2012, 16:23
Avatar de Pablo Ayala  
Fecha de Ingreso: septiembre-2005
Ubicación: Cancún, México
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 28
Respuesta: problema con consulta

Y te funcionan esas consultas?
Código MySQL:
Ver original
  1. select count(*),* from tabla where hora<10:30:00 and hora>10:30:00
  2. select count(*),* from tabla where hora<11:30:00 and hora>11:30:00

¿¿¿¿"where hora<10:30:00 and hora>10:30:00 "???
Perdona mi ignorancia... pero me da la impresión de que te consulta todas las llamadas, no?

Saludos
__________________
Atentamente,

Pablo Ayala.
Si vas a responder algo en el foro que sea con amabilidad.
  #3 (permalink)  
Antiguo 21/06/2012, 07:46
 
Fecha de Ingreso: agosto-2008
Mensajes: 272
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: problema con consulta

perdon puse los signos al revez
SELECT count(*),* FROM tabla WHERE hora<11:30:00 AND hora>10:30:00
UNION
SELECT count(*),* FROM tabla WHERE hora>11:30:00 AND hora<12:30:00
  #4 (permalink)  
Antiguo 21/06/2012, 08:24
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 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.

Etiquetas: select, tabla, tipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:50.