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

Linea de Tiempo

Estas en el tema de Linea de Tiempo en el foro de Mysql en Foros del Web. Necesito establecer una linea de tiempo para mostrar un gráfico de actividad en una centralita telefónica. De forma resumida, en una tablase se registra el ...
  #1 (permalink)  
Antiguo 05/05/2010, 16:54
 
Fecha de Ingreso: abril-2010
Mensajes: 6
Antigüedad: 14 años
Puntos: 0
Linea de Tiempo

Necesito establecer una linea de tiempo para mostrar un gráfico de actividad en una centralita telefónica.

De forma resumida, en una tablase se registra el datetime del momento de entrada de una llamada y en ese momento se guarda el total de lineas ocupadas.

Básicamente tengo 3 campos:
  • cdrid (Autonumerico)
  • start (datetime)
  • concurrent (entero)

Lógicamente pasan horas en las que no entra ni una llamada y minutos en los que entran varias llamadas.

Tengo una consulta que me muestra por horas el maximo y el minimo de concurrentes, pero si durante una hora no ha habido ninguna llamada entrante no obtengo ninguna fila, en el ejemplo que os pongo entre las 10 y las 15 no ha habido actividad y no aparecen datos.

Código:
SELECT DATE_FORMAT(start,'%H') AS Tiempo,
       MAX(concurrent),
       MIN(concurrent)
FROM cdrin 
WHERE DATE_FORMAT(start,'%Y/%m/%d') BETWEEN '2010/05/05' AND '2010/05/05' GROUP BY Tiempo DESC
Código:
Tiempo 	MAX(concurrent) 	MIN(concurrent)
23 	75 	60
22 	120 	75
21 	152 	113
20 	265 	153
19 	427 	258
18 	413 	12
17 	13 	6
16 	11 	5
15 	8 	3
09 	5 	3
08 	30 	2
07 	129 	46
06 	105 	58
05 	77 	55
04 	81 	65
03 	78 	32
02 	68 	41
01 	45 	38
00 	71 	40
Mi intención es exportar la consulta a Excel y obtener un gráfico, pero para que quede bien necesitaría que apareciesen las horas nulas.

Gracias.
  #2 (permalink)  
Antiguo 06/05/2010, 09:02
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Linea de Tiempo

Creo que con una sola consulta no puedes obtener ese resultado.

Por que harías alusión a registros que nisiquiera existen en la base de datos.

En postgresql hay una función llamada generate_series que podría solucionar este problema. Puedes buscar la equivalencia para mysql.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 06/05/2010, 09:55
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: Linea de Tiempo

Hola xixns:

Yo tenía el mismo problema con una central, con la diferencia que en mi caso hace un registro cada 15 minutos, y si en una rango no hay llamadas, no escribe el registro, o sea por ejemplo si entre las 3:00 y las 3:15 no hay llamadas no hace el registro de las 3:15.

La solución fue crear dos tablas: fecha, y Hora, para cruzarlas con la tabla de registro de tráfico.
Te dejo la consulta con la que hago el reporte, me lista todos los periodos cada 15 minutos entre las fechas declaradas en el Where.

Si quieres tener registro por un periodo distinto de tiempo, tendrías que adecuar las tabla horas a tus necesidades.

Espero te sirva de orientación.

Código MySQL:
Ver original
  1. YEAR(b.`HORARIO`) AS `AÑO`,    
  2. WHEN MONTH(b.`HORARIO`) = 1 THEN "enero"  
  3. WHEN MONTH(b.`HORARIO`) = 2 THEN "febrero"
  4. WHEN MONTH(b.`HORARIO`) = 3 THEN "marzo"  
  5. WHEN MONTH(b.`HORARIO`) = 4 THEN "abril"  
  6. WHEN MONTH(b.`HORARIO`) = 5 THEN "mayo"  
  7. WHEN MONTH(b.`HORARIO`) = 6 THEN "junio"  
  8. WHEN MONTH(b.`HORARIO`) = 7 THEN "julio"  
  9. WHEN MONTH(b.`HORARIO`) = 8 THEN "agosto"  
  10. WHEN MONTH(b.`HORARIO`) = 9 THEN "septiembre"  
  11. WHEN MONTH(b.`HORARIO`) = 10 THEN "octubre"  
  12. WHEN MONTH(b.`HORARIO`) = 11 THEN "noviembre"  
  13. WHEN MONTH(b.`HORARIO`) = 12 THEN "diciembre"  
  14. ELSE "NUUL_MES" END)  AS MES ,    
  15.    WHEN WEEKDAY(b.`HORARIO`) = 0 THEN "Lunes"
  16.    WHEN WEEKDAY(b.`HORARIO`) = 1 THEN "Martes"
  17.    WHEN WEEKDAY(b.`HORARIO`) = 2 THEN "Miercoles"
  18.    WHEN WEEKDAY(b.`HORARIO`) = 3 THEN "Jueves"
  19.    WHEN WEEKDAY(b.`HORARIO`) = 4 THEN "Viernes"
  20.    WHEN WEEKDAY(b.`HORARIO`) = 5 THEN "Sabado"
  21.    WHEN WEEKDAY(b.`HORARIO`) = 6 THEN "Domingo"
  22.    ELSE "NUUL_DIA" END) AS `DIA`,
  23. DATE_FORMAT(b.`HORARIO`,'%Y-%m-%d') AS FECHA,
  24. HOUR(b.`HORARIO`) AS HORA,
  25. TIME_FORMAT(b.`HORARIO`,'%H:%i:%s') AS CUARTOHORA,
  26. SUM(IFNULL(a.RECIBIDO,'0')) recibido
  27.        CONCAT(f.fecha_maestra,' ',h.hora_cuarto_maestra) `HORARIO`
  28.        FROM fecha f, Hora h ) b
  29. LEFT JOIN trafico_registro_15_minutos a      
  30. ON   b.`HORARIO`= a.fecha_date  
  31. WHERE b.`HORARIO` BETWEEN '2009-03-01 00:00:00' AND '2009-03-03 23:59:00'
  32. GROUP BY b.`HORARIO`
  33. ORDER BY b.`HORARIO` ASC;

PD: La tabla Fecha, lista las fechas, para mi caso tengo cargado todas las fechas desde 2009-01-01 al 2012-12-31.
La tabla Hora: tiene un campo en el que estan todos los cuartos de hora del día: 00:15, 00:30, 00:45, etc.
  #4 (permalink)  
Antiguo 23/05/2010, 17:18
 
Fecha de Ingreso: abril-2010
Mensajes: 6
Antigüedad: 14 años
Puntos: 0
Respuesta: Linea de Tiempo

Gracias a ambos, todavía estoy dándole vueltas, ya os comentaré como decido resolverlo.

Etiquetas: linea
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 09:54.