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

agrupar cada 15 min

Estas en el tema de agrupar cada 15 min en el foro de Mysql en Foros del Web. Hola a todos haber si una vez más me dan una mano, tengo el siguiente codigo que trae los registros agrupados cada 15 minutos, pero ...
  #1 (permalink)  
Antiguo 17/12/2008, 16:56
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
agrupar cada 15 min

Hola a todos

haber si una vez más me dan una mano, tengo el siguiente codigo que trae los registros agrupados cada 15 minutos, pero solo de los cuartos en los que hay registros.
ahora lo que necesito es que tambien me muestre los cuartos de hora en los que no hay registros con un valor 0

Código:
SELECT 
   CONCAT(IF(hour(log_0.hora)<10,
   CONCAT('0',hour(log_0.hora)) , hour(log_0.hora)),':',
   IF((FLOOR( MINUTE(log_0.hora) / 15 )*15)=0, '00',
   FLOOR( MINUTE(log_0.hora) / 15 )*15)) AS horacuartos, 
   SUM(IF(t_mensaje='' OR t_mensaje='NORMAL' 
   OR t_mensaje='CODIGO' OR t_mensaje='GENERAL' 
   OR t_mensaje='GENERAL PRE' OR t_mensaje='HOTLINE'
   OR t_mensaje='HOTLINE-ANEXO',1,0)) AS `TRAFICO TOTAL`
FROM ivr.log log_0
WHERE log_0.fecha_date>='2008-12-17' 
AND log_0.fecha_date<='2008-12-17' 
and log_0.hora>='00:00'
and log_0.hora<='23:59'
GROUP BY( (60/4) * HOUR( log_0.hora ) + FLOOR( MINUTE( log_0.hora) / 15 ))
order by log_0.hora
desc LIMIT 0,100
ya creé otra tabla (horas) con todos los cuartos de hora del día (cuartohora), pero al hacer el join tengo problemas para cruzarlas.
Código:
 
From ivr.log
left join ivr.horas
on log.horacuartos = horas.cuartohoras
El problema es que 'horacuarto' no es un campo de la tabla log, si no un alias de la visulaización de los datos del campo hora agrupados en 15 min, por lo tanto me da error , dice que no existe ese campo

Alguna idea de como hacer esto???

si no me expliqué bien favor me dice y trato de ser mas claro

gracias
  #2 (permalink)  
Antiguo 18/12/2008, 01:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: agrupar cada 15 min

¿Has probado a poner directamente el dato en el ON y no el alias? Algo así como la propuesta que te hago (me he inventado los nombres de la tabla y campo con horas cuarto). No sé cómo guardarás esa horacuarto en la nueva tabla, si como TIME o como texto. Si es campo de tipo TIME, quizás para hacer el cruce tengas que convertir a tiempo mediante cast el valor que generas mediante esos concat... o, quizás mejor, hacer el cast del nuevo valor, ese horacuarto, a char. No he probado nada.

... ON CONCAT(IF(hour(log_0.hora)<10,
CONCAT('0',hour(log_0.hora)) , hour(log_0.hora)),':',
IF((FLOOR( MINUTE(log_0.hora) / 15 )*15)=0, '00',
FLOOR( MINUTE(log_0.hora) / 15 )*15)) = tablahorascuartos.horacuarto

Última edición por jurena; 18/12/2008 a las 01:27
  #3 (permalink)  
Antiguo 18/12/2008, 16:12
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: agrupar cada 15 min

Hola Jurena

Si lo había probado pero no, volví a hacerlo ahora pero nada, de hecho cambie el campo de la tabala horascuarto de time a chart, pero nada

La query corre bien, no arroja errores, pero tampoco levanta los cuartos de hora donde no hay registros

mmmm
  #4 (permalink)  
Antiguo 19/12/2008, 00:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: agrupar cada 15 min

Cita:
Iniciado por chelodelsur Ver Mensaje
Hola Jurena

Si lo había probado pero no, volví a hacerlo ahora pero nada, de hecho cambie el campo de la tabala horascuarto de time a chart, pero nada

La query corre bien, no arroja errores, pero tampoco levanta los cuartos de hora donde no hay registros

mmmm

chelodelsur,

No sé si habré entendido bien lo que quieres, pero si lo que deseas es hacer un cruce de esos valores con los de una tabla de horas y cuartos con el formato 00:15, 00:30 y el tipo varchar, o bien con un tipo time y formato 00:15:00, 00:30:00, el cruce se hace bien de varias formas. Yo he pensado que tienes las cuartohoras de horas en un tipo de campo time con formato 00:15:00 y he hecho el cruce así:
SELECT log_0.hora, horas.cuartohoras, CONCAT( IF( hour( log_0.hora ) <10, CONCAT( '0', hour( log_0.hora ) ) , hour( log_0.hora ) ) , ':', IF( (
FLOOR( MINUTE( log_0.hora ) /15 ) *15 ) =0, '00', FLOOR( MINUTE( log_0.hora ) /15 ) *15 )
) AS horacuartos
FROM log log_0
INNER JOIN horas ON ( CONCAT( IF( hour( log_0.hora ) <10, CONCAT( '0', hour( log_0.hora ) ) , hour( log_0.hora ) ) , ':', IF( (
FLOOR( MINUTE( log_0.hora ) /15 ) *15 ) =0, '00', FLOOR( MINUTE( log_0.hora ) /15 ) *15 ) )
) = left( cast( horas.cuartohoras AS char ) , 5 )

Si tienes un campo VARCHAR y lo escribes así: 00:15, sólo tendrás que poner tras el igual el nombre del campo.

Esto es sólo un ejemplo para que veas que donde hay hora en la tabla log podrás cruzar los datos. No me gusta demasiado que pongas el mismo nombre a un campo que el alias que aplicas a lo generado con datos de campos de otra tabla. Sería mejor que cambiaras alguna letra de alguno para evitar problemas.
Lo que he hecho ha sido hacer el cruce no con todo el dato de cuartohoras de horas, sino con la parte que va de izquierda a derecha, 5 caracteres (hora y minutos), convertidos a char para que conserve los ceros y funcione como cadena de texto.

Pero quizás no he entendido lo que quieres, porque añades
Cita:
pero tampoco levanta los cuartos de hora donde no hay registros
¿qué significa exactamente eso? Pon algún ejemplo.
  #5 (permalink)  
Antiguo 19/12/2008, 05:50
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: agrupar cada 15 min

Gracias Jurena por al dedicación

Mira tengo un tabla log que registra llamadas, luego tengo una consulta que agrupa la cantidad de llamadas en periodos de 15 min. esto todo bien. Lo que pasa es que si en un periodo de 15min ejem 01:00 a 00:15 no hay llamadas este periodo no aparace en la consulta. Ahora lo que necesito es hacer una consulta que me liste TODOS los cuartos de horas incluso en los que no hay llamadas. Para eso cree una tabla con todo los cuartos de horas del día y cruzarla con la tabla log.
En este momnto la consulta hace esto
hora -------llamadas
00:00------20
00:15------10
00:45------5

Y necesito esto
hora -------llamadas
00:00------20
00:15------10
00:30-------0
00:45------5
01:00-------0
etc
  #6 (permalink)  
Antiguo 19/12/2008, 08:26
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: agrupar cada 15 min

Si mantienes el orden que te puse, en lugar de INNER JOIN, usa RIGHT JOIN, y controla el valor de NULL en esos totales sumados a los que llamas llamadas, usando para hacerlo IFNULL(SUM(datosumado), '0')...

Última edición por jurena; 22/12/2008 a las 04:47
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:53.