mysql - 如何查询酒店数据库以返回对连续三晚可用的单间的查询?

标签 mysql sql qsqlquery

我试图找到以下查询的答案: 一位客户想要连续三晚入住单人房。查找 2016 年 12 月的第一个可用日期。

根据问题,这应该是正确答案。但是我不知道怎么解决。

+-----+------------+
| id  | MIN(i)     |
+-----+------------+
| 201 | 2016-12-11 |
+-----+------------+

链接来自question number 14 here .

这是数据库的ER图: ER diagram of the database

最佳答案

我很抱歉我对这种查询有点生疏,我不能保证我得到的所有语法都是正确的,但我认为像下面这样的东西可能会起作用:

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/

相关文章:

sql - 我如何将这个 Django 查询循环重写为更高效的 SQL 查询?

mysql - 将变量分配给mysql查询ruby

sql - hive LIKE 运算符的特殊字符的完整列表

mysql 连接多个

mysql - 使用Sqoop将MySQL导入Hive时如何指定字段分隔符?

sql - 从给定数据中查找下一个工作日期

PostgreSQL - 查询 3 个表

mysql - Qt4:如何在线程之间传输mysql查询?

c++ - Qt QSqlQuery 返回 json

php - 在大写字符处拆分字符串