我试图找到以下查询的答案: 一位客户想要连续三晚入住单人房。查找 2016 年 12 月的第一个可用日期。
根据问题,这应该是正确答案。但是我不知道怎么解决。
+-----+------------+
| id | MIN(i) |
+-----+------------+
| 201 | 2016-12-11 |
+-----+------------+
链接来自question number 14 here .
这是数据库的ER图:
最佳答案
我很抱歉我对这种查询有点生疏,我不能保证我得到的所有语法都是正确的,但我认为像下面这样的东西可能会起作用:
SELECT id, DATE_ADD(b.booking_date, INTERVAL (end_date + 1 DAY) as date
FROM (
SELECT r.id, STR_TO_DATE('2016-01-01', '%Y-%m-%d') as start_of_month, b.booking_date as start_date, DATE_ADD(b.booking_date, INTERVAL (nights - 1) DAY) as end_date
FROM room r
LEFT JOIN booking b ON r.id = b.room_no
ORDER BY r.id, b.booking_date
) as room_bookings
WHERE DATE_DIFF(room_bookings.start_of_month, room_bookings.start_date) >= 3
OR DATE_DIFF(room_bookings.end_date, (
SELECT b2.booking_date FROM booking b2
WHERE b2.room_no = room_bookings.id AND b2.booking_date > room_bookings.start_date
ORDER BY b2.booking_date LIMIT 1)
) >= 3
事实上,现在我已经全部输入了,您也许可以调整主查询的 WHERE,这样您甚至不需要 room_bookings 子选择。希望这会有所帮助,并且不会离题太远。
关于mysql - 如何查询酒店数据库以返回对连续三晚可用的单间的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53346988/