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

Problema al obtener número de registros agrupados por fecha

Estas en el tema de Problema al obtener número de registros agrupados por fecha en el foro de Mysql en Foros del Web. Hola a todos/as, Tengo un problema sobre una consulta select que no veo manera de resolver. La duda es la siguiente: Tengo una tabla "reservas" ...
  #1 (permalink)  
Antiguo 15/10/2015, 12:51
 
Fecha de Ingreso: marzo-2004
Mensajes: 550
Antigüedad: 20 años, 1 mes
Puntos: 7
Problema al obtener número de registros agrupados por fecha

Hola a todos/as,

Tengo un problema sobre una consulta select que no veo manera de resolver. La duda es la siguiente:

Tengo una tabla "reservas" que entre sus campos hay uno llamado "fechareserva" que como su nombre indica almacena la fecha en la cual se ha hecho una reserva. Necesito sacar el número de reservas que se han realizado en un periodo de tiempo agrupadas por días. Por ejemplo:

Fecha Cantidad
01/10/2015 3
02/10/2015 5
03/10/2015 10
-----------------------------------

Para ello, ejecuto una consulta select como la siguiente:

select fechareserva as Fecha, count(*) as Cantidad from reservas where fechareserva between "01/10/2015" and "10/10/2015" group by Fecha

El resultado que obtengo es algo como lo siguiente:

Fecha Cantidad
01/10/2015 2
03/10/2015 15
05/10/2015 20
08/10/2015 5
10/10/2015 4


Como se puede observar, no me devuelve el número de reservas para los días 2,4,6,7,9 de Octubre del 2015. Por lo que he visto, en esos días el número de reservas es 0.

Yo necesito que me devuelva también esos días aunque el número de reservas sea cero, es decir, que obtenga algo como lo siguiente:


Fecha Cantidad
01/10/2015 2
02/10/2015 0
03/10/2015 15
04/10/2015 0
05/10/2015 20
06/10/2015 0
07/10/2015 0
08/10/2015 5
09/10/2015 0
10/10/2015 4


¿Existe alguna manera de hacerlo?

Como dato extra, tengo una tabla llamada "Calendar" con un único campo llamado "fecha" que contiene registros que representan las fechas que comprenden el periodo del 01/01/2009 hasta el 01/01/2020. No se si con esa tabla combinándola con la de "reservas" es posible obtener el resultado que yo quiero. Lo he intentado combiando ambas tablas con un left join por ejemplo pero tampoco he conseguido lo deseado.

Espero que alguien arroje algo de luz al problema.


Saludos.

Última edición por aeb_asturias; 15/10/2015 a las 13:05
  #2 (permalink)  
Antiguo 19/10/2015, 04:52
 
Fecha de Ingreso: marzo-2004
Mensajes: 550
Antigüedad: 20 años, 1 mes
Puntos: 7
Respuesta: Problema al obtener número de registros agrupados por fecha

Ya resolví el problema. El tema de porqué no me salían las fechas con 0 reservas era porque estaba poniendo una condición dentro de la cláusula "where" de la consulta en vez de meterla dentro de la clausula "on" del Left Join. Al final, la consulta me queda algo como esto:
Código SQL:
Ver original
  1. SELECT calendario.DATE AS DIAS_RESERVAS, COUNT(reservas.ident) AS NUM_RESERVAS FROM calendario LEFT JOIN reservas ON calendario.DATE=DATE_FORMAT(reservas.fechareserva, '%Y-%m-%d')
  2. AND reservas.tipo=2
  3. WHERE calendario.DATE BETWEEN "2015-05-18" AND "2015-05-26"
  4. GROUP BY DIAS_RESERVAS


El problema que veo ahora es que la consulta es muy lenta (Me tarda más de 12 segundos). La tabla "calendario" sólo contiene un campo llamado "date" y contiene registros con valores que van desde "2010-01-01" hasta "2020-01-01". La tabla "reservas" en cambio puede tener sobre 500.000 registros.

Hay alguna manera de poder agilizar la consulta anterior??? Porque es poco viable esperar tanto tiempo :(

Etiquetas: select
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 07:49.