【问题标题】:Count the quantity of available rooms between two dates计算两个日期之间的可用房间数量
【发布时间】:2013-05-25 15:17:24
【问题描述】:

我有两个数据表:

  • 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 间贵宾房

  • 2013-05-26 至 2013-05-27 客人 1:3 标准
  • 2013 年 5 月 27 日至 2013 年 5 月 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 上级
  • 3 位贵宾

结果应该是:

  • 3 标准
  • 2 上级
  • 3 位贵宾

【问题讨论】:

  • 显示你的表结构和一些示例数据,以节省大家一些时间
  • @DrewPierce:我已经添加了我的结构数据,请帮助我。谢谢!
  • 好的,你能提供一些样本数据吗
  • 您需要稍微解释一下。在 tbbooking 中,由于 id 是主键,它肯定与 tbroom_capacity.id 无关。看起来好像 tbroom 正在显示一个房间 ID,而 quantity_room 表示有多少人可以在那里住一晚。并且 tbbooking 不是一本实际的书(因为它与特定房间无关),而是对开始和结束以及客人数量以及所需房间类型的预订请求

标签: mysql .net sql


【解决方案1】:

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

例子:

从 tbbooking 中选择 sum(quantity_room_booking) 其中 DATE_ADD(endDate,INTERVAL -1 DAY) >= '2013-05-26' 和 startDate

希望对您了解房型有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2019-09-27
    • 1970-01-01
    相关资源
    最近更新 更多