![]() |
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? |
Respuesta: Ayuda con consulta compleja (eficiencia) estas usando group by? |
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) |
| La zona horaria es GMT -6. Ahora son las 08:20. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.