Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Mysql

Respuesta
 
Herramientas Desplegado
Antiguo 21-jul-2008, 18:56   #1 (permalink)
decklord ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 2
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-jul-2008 a las 19:05.
decklord está desconectado   Responder Citando
Antiguo 21-jul-2008, 20:10   #2 (permalink)
erwinrp ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2004
Mensajes: 180
Respuesta: Ayuda con consulta compleja (eficiencia)

estas usando group by?
__________________
www.lomasnuevo.net
erwinrp está desconectado   Responder Citando
Antiguo 21-jul-2008, 21:53   #3 (permalink)
decklord ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 2
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-jul-2008 a las 22:47.
decklord está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 15:38.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93