我有两个数据表:
tbroom_capacity
:roomtype
,quantity_room
,note
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
tbbooking
:guestid
,roomtypeid
,quantity_room_booking
,startDate
,endDate
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 间贵宾房
- 嘉宾1:3标准从2013-05-26到2013-05-27
- 嘉宾2:2013-05-27至2013-05-28的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 贵宾