Tarifas de reserva de hotéis SQL Problem
Estou tentando obter meu próprio sistema para verificar as tarifas dos quartos depois de ler outras perguntas aqui no StackOverflo
Minha consulta funciona bem e produz um número correto de dias quando não há sobreposição de tarifas nas datas da reserva, mas quando há uma sobreposição, recebo um dia extra na minha segunda linha de resultado
Por exemplo, uma pessoa chega em 14/04/2011 e sai em 16/04/2011 (2 dias). Há uma mudança de taxa de 66 para 70 no dia 15, então ele deve ter 1 dia na taxa 66 e 1 dia na taxa 70.
Tentei sem TIMEDATE - apenas DATE, mas a mesma coisa acontece.
Inqueri
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
Eu realmente aprecio qualquer ajuda ou uma explicação de por que minha consulta me fornece o dia extra da segunda linha de resultado
Obrigad