组合多行以组成日期范围

时间:2011-09-06 14:43:35

标签: mysql sql database

我不确定这是否可以使用MySQL,它有点复杂,但我会尽力解释。

我修改住宿可用性&基于现有数据库的价格检查系统。访客可以选择抵达和离开日期,我希望能够显示这些日期的所有房价/优惠。简单。但是,可以将优惠设置为仅适用于给定日期范围的第一部分,并且可以为该房间类型设置第二速率,涵盖日期范围的后半部分。

e.g。我选择9月29日至10月3日入住。房间1的费率已经设定为9月1日至30日,第二次是10月1日至31日。

我可以查询表格以检查除了跨越整个范围的费率之外,同一房间ID的成对(或者甚至更多)费率是否共同覆盖日期范围,并检索费率&对那些人的描述?

下面的查询检查在给定日期之间有效的基本费率(其中roomtype是房间的ID):

SELECT id, caption, price, startdate, enddate, nights, roomtype,
(@arrival := DATE('2011-09-29')) AS arrivaldate,
(@departure := DATE('2011-10-05')) AS departuredate
FROM bnbrates
WHERE
bnb_ref = 16639
AND active = 'TRUE'
AND rooms != 0
AND @arrival < enddate
AND @departure > startdate
AND roomtype != ''  
ORDER BY roomtype, enddate, startdate, price;

这是存储数据的示例:

id       | caption     | price | startdate     | enddate      | nights | roomtype | arrivaldate | departuredate
-------------------------------------------------------------------------------------------------------------------
23553 | Single      | 50     | 2011-10-01 | 2011-10-31 | 1        | 1064       | 2011-09-29 | 2011-10-05
23544 | Double     | 55     | 2011-09-01 | 2011-09-30 | 1        | 1647       | 2011-09-29 | 2011-10-05
23545 | Double     | 80     | 2011-10-01 | 2011-10-31 | 1        | 1647       | 2011-09-29 | 2011-10-05
30312 | Triple       | 109   | 2011-09-01 | 2011-09-30 | 1        | 1649       | 2011-09-29 | 2011-10-05
34234 | Executive | 109   | 2011-09-01 | 2011-09-30 | 1        | 1653       | 2011-09-29 | 2011-10-05
23569 | Executive | 99     | 2011-10-01 | 2011-10-31 | 1        | 1653       | 2011-09-29 | 2011-10-05

例如,期望的结果将23544与23545和34234与23569

组合

提前感谢您的帮助,如果这没有意义,请道歉......

0 个答案:

没有答案