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

Ayuda con consulta compleja (eficiencia)

Estas en el tema de Ayuda con consulta compleja (eficiencia) en el foro de Mysql en Foros del Web. Hola tengo el siguiente problema a ver si me ayudan con ideas. Tengo una tabla que almacena eventos con la fecha de ocurrencia (año,mes,dia, hora,min, ...
  #1 (permalink)  
Antiguo 21/07/2008, 18:56
 
Fecha de Ingreso: julio-2008
Mensajes: 2
Antigüedad: 15 años, 9 meses
Puntos: 0
Exclamación Ayuda con consulta compleja (eficiencia)

Hola tengo el siguiente problema a ver si me ayudan con ideas.

Tengo una tabla que almacena eventos con la fecha de ocurrencia (año,mes,dia, hora,min, seg), además estos eventos tienen diferentes categorías (A,B,C,D,E,F, etc.). La estructura de la tabla podría ser (esto es una simplificación del problema real) :

Eventos:
id_evento
fecha_evento
categoria_evento

Ahora bien, necesito retornar una tabla que contenga la cantidad de eventos de las diferentes categorias en intervalos de fechas ( dia, mes, año,etc) entre dos fechas. Por ejemplo intervalos de a un mes entre el 2007 y 2008. Esto seria Enero-Febrero, Febrero-Marzo, Marzo-Abril.... Diciembre-Enero.

Una idea de la tabla seria

Enero-Febrero Febrero-Marzo Marzo-Abril .... Diciembre-Enero
A 20 21 30 12
B 46 14 ...
C 23 17 ...
D 0 16 ...
...

En estos momentos estoy realizando una consulta por cada celda, es decir, hago count de los eventos que estan entre enero y febrero cuya categoria es A. El problema es que la tabla esta densamente poblada por lo que completar todas las celdas toma varios segundos.

Existe alguna forma de generar la tabla con sql directamente? o disminuir al minimo posible la cantidad de consultas?

Última edición por decklord; 21/07/2008 a las 19:05
  #2 (permalink)  
Antiguo 21/07/2008, 20:10
 
Fecha de Ingreso: octubre-2004
Mensajes: 251
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: Ayuda con consulta compleja (eficiencia)

estas usando group by?
__________________
www.lomasnuevo.net
  #3 (permalink)  
Antiguo 21/07/2008, 21:53
 
Fecha de Ingreso: julio-2008
Mensajes: 2
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Ayuda con consulta compleja (eficiencia)

Sí, pero me faltaba algo que es lo que descubri hace poco.

Para hacer lo que necesitaba se puede usar group by combinado con el tipo de intervalo, por ejemplo GROUP BY DAY(fecha) eso retorna los datos agrupados diariamente en toda la tabla.
Hay que tener cuidado con lo anterior pues DAY(fecha) retorna el entero equivalente al dia, por lo que si trabajamos con mas de un mes, donde los numeros de los dias se repiten, se pueden generar resultados no deseados. Para evitar cualquier problema se debe hacer agrupando asi:

GROUP BY YEAR(date),MONTH(date),DAY(date)

Última edición por decklord; 21/07/2008 a las 22: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 08:22.