Tarifas de reserva de hotel Problema SQL
He estado tratando de obtener mi propio sistema para verificar las tarifas de las habitaciones después de leer otras preguntas aquí en StackOverflow.
Mi consulta funciona bien y produce el número correcto de días cuando no hay superposición de tarifas en las fechas de reserva, pero cuando hay una superposición obtengo un día adicional en mi segunda fila de resultados.
Por ejemplo, una persona llega el 14/04/2011 y se va del 16/04/2011 (2 días). Hay un cambio en la tasa de 66 a 70 el día 15, por lo que debería tener 1 día en la tasa de 66 y 1 día en la tasa de 70.
He intentado sin TIMEDATE, solo DATE pero sucede lo mismo.
Consult
SELECT rates.rate_id, rate_start_date, rate_end_date, rate_price,
(DATEDIFF( IF (rate_end_date > '2011-04-16 14:00:00' , '2011-04-16 14:00:00', rate_end_date),
IF ( rate_start_date < '2011-04-14 12:00:00' , '2011-04-14 12:00:00' , rate_start_date )) +1 )
AS days FROM rates
WHERE rate_start_date <= '2011-04-16 14:00:00' AND rate_end_date > '2011-04-14 12:00:00'
ORDER BY rate_price ASC
rates table
rate_id rate rate_start_date rate_end_date
1 70 2011-04-15 00:00:00 2011-05-31 23:59:59
2 80 2011-06-01 00:00:00 2011-06-30 23:59:59
3 100 2011-07-01 00:00:00 2011-08-31 23:59:59
4 80 2011-09-01 00:00:00 2011-09-30 23:59:59
5 70 2011-10-01 00:00:00 2011-10-31 23:59:59
6 45 2011-11-01 00:00:00 2011-12-31 23:59:59
0 66 2011-01-01 00:00:00 2011-04-14 23:59:59
resultad
rate_id rate_start_date rate_end_date rate days
0 2011-01-01 00:00:00 2011-04-14 23:59:59 66 1
1 2011-04-15 00:00:00 2011-05-31 23:59:59 70 2 <----this should be 1 day
Realmente agradecería cualquier ayuda o una explicación de por qué mi consulta me da el día adicional de la segunda fila de resultados.
Gracia