【发布时间】:2011-03-27 21:59:23
【问题描述】:
您好,在阅读了 StackOverflow 上的其他问题后,我一直在尝试使用自己的系统来检查房价。
当预订日期的费率没有重叠时,我的查询工作正常,并产生正确的天数,但何时重叠,我的第二行结果会多出一天。
例如,一个人于 2011 年 4 月 14 日到达并于 2011 年 4 月 16 日离开(2 天)。 15号有66到70的汇率变化,所以他应该有1天的66汇率和1天的70汇率。
我尝试过不使用 TIMEDATE - 只是 DATE 但同样的事情发生了。
查询
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
费率表
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
结果
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
我非常感谢任何帮助或解释为什么我的查询给了我第二行结果的额外一天。
谢谢
【问题讨论】: