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

Agrupar datos cada 15 min.

Estas en el tema de Agrupar datos cada 15 min. en el foro de Mysql en Foros del Web. Hola nuevamente Una vez más vengo a solicitar su siempre presta ayuda. Tengo una consulta que lee los ingresos a una BD agrupados cada 15 ...
  #1 (permalink)  
Antiguo 12/07/2008, 10:05
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Agrupar datos cada 15 min.

Hola nuevamente

Una vez más vengo a solicitar su siempre presta ayuda.

Tengo una consulta que lee los ingresos a una BD agrupados cada 15 minutos. El tema es que necesito a finar la consulta en dos aspectos.

SELECT (log_0.fecha_date) as `fecha`,log_0.hora as `hora`,
SUM(IF(ROW_ID,1,0)) AS TOTAL_TRAFICO
FROM saesa.log log_0
WHERE log_0.fecha_date>='2008-07-12'
AND log_0.fecha_date<='2008-07-31'
and log_0.hora>='11:00'
and log_0.hora<='13:00'
GROUP BY( (60/4) * HOUR( log_0.hora ) + FLOOR( MINUTE( log_0.hora) / 15 ))
order by log_0.hora
desc LIMIT 0,100

1. Que la consulta me devuelva la hora en lampos exactos de 15 min., me explico: en el codigo que adjunto la consulta me devuelve datos por ejemplo, el primer lapso de tiempo a las 11:03, luego a las 11:35, y luego a las 11:45. Lo que yo necesito es que me liste los intervalos de tiempo exactos de 15 min. O sea 11:00, 11:15, 11:30, etc.
fecha **hora **TOTAL_TRAFICO
2008-07-12 ** 11:45:04 ** 51
2008-07-12 ** 11:35:04 ** 96
2008-07-12 ** 11:03:16 ** 89

2. La segunda es que los intervalos sean listado aunque no existan registros cargados para ese lapso de tiempo, o sea que si entre las 11:15 y las 11:30 no hay ingresos el intervalo diga 0.

Espero haberme explicado bien,
Desde ya gracias por su siempre oportuna ayuda.
  #2 (permalink)  
Antiguo 12/07/2008, 10:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Agrupar datos cada 15 min.

1) Para lo primero tengo una solución que te lo saca en cadena de texto.

Select hora, CONCAT(IF(hour(hora)<10,CONCAT('0',hour(hora)) , hour(hora)),':', IF((FLOOR( MINUTE(hora) / 15 )*15)=0, '00',FLOOR( MINUTE(hora) / 15 )*15)) AS horacuartos FROM nombretutabla

Quita los segundos y te muestra junto al dato de la hora los minutos en cuartos, medias, tres cuartos y enteras. Observa que me sirvo de la misma fórmula que para agrupar, pero que cuando tengo eliminado los restos, vuelvo a multiplicar por 15.

2) de los datos que tienes no creo que puedas sacar los cuartos que no tengan datos. Para eso tal vez deberías crear una tabla con los cuartos de todas las horas del día y luego relacionar por ese dato con ese horacuartos, haciéndolo claro esta con RIGHT JOIN para mostrar ese resultado 0 (esto si solo hablamos de la base de datos, pues con programación podrías usar arrays...).

Esto es lo que se me ocurre...

Última edición por jurena; 13/07/2008 a las 00:42
  #3 (permalink)  
Antiguo 12/07/2008, 11:03
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: Agrupar datos cada 15 min.

Gracias Jurena

voy a digerir lo que me posteas y ya estoy contando como me fue.

Marcelo
  #4 (permalink)  
Antiguo 12/07/2008, 11:25
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: Agrupar datos cada 15 min.

Ok

La primera funciona perfecto, es lo que necesitaba.

La segunda: la idea es hacerlo por BD, ojala me puedas hechar una mano con eso. No hay drama en crear la tabla para listar los cuartos de hora. Pero no me manejo con los Join, se agradece su ayuda

Saludos
Marcelo
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 08:51.