计算两个日期之间的可用房间数量

时间:2013-05-25 15:17:24

标签: mysql .net sql

我有两个数据表:

  • tbroom_capacityroomtypequantity_roomnote

    CREATE TABLE `tbroom_capacity` (
        `id` int(10) NOT NULL DEFAULT '0',
        `roomtype` varchar(30) COLLATE utf8_bin DEFAULT NULL,
        `quantity_room` int(20) DEFAULT NULL,
        `note` varchar(50) COLLATE utf8_bin DEFAULT NULL,
        PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
    

数据: https://dl.dropboxusercontent.com/u/50542216/1.png

  • tbbookingguestidroomtypeidquantity_room_bookingstartDateendDate

    CREATE TABLE `tbbooking` (
        `guestid` int(20) DEFAULT NULL,
        `roomtypeid` varchar(20) COLLATE utf8_bin DEFAULT NULL,
        `quantity_room_booking` int(20) DEFAULT NULL,
        `startDate` date DEFAULT NULL,
        `endDate` date DEFAULT NULL,
        `id` int(11) NOT NULL DEFAULT '0',
        PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
    

数据:

https://dl.dropboxusercontent.com/u/50542216/2.png

我想计算每个房间类型的两个日期之间的剩余房间数。

一个例子:

共有15个房间,3个类型:10个标准,2个高级,3个VIP

  • 2013-05-26至2013-05-27的嘉宾1:3标准
  • 2013-05-27至2013-05-28的嘉宾2:3标准
  • 嘉宾3想要预订2013-05-26至2013-05-28
  • 的房间

我试过这个来检索总不可用的房间:

SELECT sum(quantity_room_booking) FROM tbbooking 
where DATE_ADD(endDate,INTERVAL -1 DAY) >= '2013-05-26' 
and startDate <= '2013-05-28' GROUP BY roomtypeid

但结果是:

  • 6 标准
  • 2 superior
  • 3 VIP

结果应为:

  • 3 标准
  • 2 superior
  • 3 VIP

1 个答案:

答案 0 :(得分:0)

您可以再添加一个布尔列,例如“已预订”,并使用该列值

查询该值

示例:

SELECT sum(quantity_room_booking)FROM tbbooking 其中DATE_ADD(endDate,INTERVAL -1 DAY)&gt; ='2013-05-26' 和startDate&lt; ='2013-05-28'并且被预订= true GROUP BY roomtypeid

我希望这可以帮助您获得房间类型