mysql - 查找空闲时间

标签 mysql sql database phpmyadmin

这是数据库架构:

   CREATE TABLE `bookings` (
      `id` int(2) NOT NULL,
      `start` time NOT NULL,
      `end` time NOT NULL
    );

    INSERT INTO `bookings` VALUES(1, '13:00:00', '14:30:00');
    INSERT INTO `bookings` VALUES(2, '15:00:00', '16:00:00');

我尝试运行以下查询,以查找“10:00:00”和“18:00:00”之间的空闲时间:

SELECT free_from, free_until
FROM (SELECT a.end AS free_from,
             (SELECT MIN(c.start)
              FROM bookings c
              WHERE c.start>a.end
             ) as free_until
      FROM bookings a
      WHERE NOT EXISTS (SELECT 1
                        FROM bookings b
                        WHERE b.start BETWEEN a.end AND a.end + 1
                       ) AND
            a.end BETWEEN '10:00:00' AND '18:00:00'
     ) t

生成的输出是:

free_from   free_until
14:30:00    15:00:00
16:00:00    NULL

为什么最后会有一个NULL呢?请帮我解决这个问题。预期输出应该是:

free_from   free_until
10:00:00    13:00:00
14:30:00    15:00:00
16:00:00    18:00:00

最佳答案

一些值得思考的事情......

SELECT NULL id,NULL start, '09:59:59' end
UNION
SELECT * FROM bookings
UNION
SELECT NULL,'18:00:01',NULL;
+------+----------+----------+
| id   | start    | end      |
+------+----------+----------+
| NULL | NULL     | 09:59:59 |
|    1 | 13:00:00 | 14:30:00 |
|    2 | 15:00:00 | 16:00:00 |
| NULL | 18:00:01 | NULL     |
+------+----------+----------+

关于mysql - 查找空闲时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23365945/

相关文章:

Mysql 删除某个字段的接近重复项

c# - 在 WPF 应用程序中连接和使用 SQL Compact Edition

php - php 如何在变量中插入双引号

mysql - 带有 SphinxSE 的 MariaDB 10.0

MySQL:查找日期范围之间的缺失日期

java - MyBatis 3 需要公共(public) setter 吗?

php - Laravel Eloquent 查询时进行过滤

mysql - 如何解决 HAVING COUNT DISTINCT 附近的错误语法?

database - 电子商务的 NoSql 数据模型

mysql - 将两个 SQL 查询合并为一个查询