在MySQL中查找“空闲”时间
我有一张桌子如下:在MySQL中查找“空闲”时间,mysql,date,timespan,Mysql,Date,Timespan,我有一张桌子如下: mysql> DESCRIBE student_lectures; +------------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+----------+------+-----+---------+-----
mysql> DESCRIBE student_lectures;
+------------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| course_module_id | int(11) | YES | MUL | NULL | |
| day | int(11) | YES | | NULL | |
| start | datetime | YES | | NULL | |
| end | datetime | YES | | NULL | |
| cancelled_at | datetime | YES | | NULL | |
| lecture_type_id | int(11) | YES | | NULL | |
| lecture_id | int(11) | YES | | NULL | |
| student_id | int(11) | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
+------------------+----------+------+-----+---------+----------------+
我基本上是想找出一个讲座没有发生的时间,所以为了做到这一点,我在考虑一个查询,将重叠的讲座分组在一起,例如,上午9点到10点和上午10点到11点的讲座将显示为上午9点到11点的单个讲座。可能会有两次以上的背靠背讲座
我现在有这个:
SELECT l.start, l2.end
FROM student_lectures l
LEFT JOIN student_lectures l2 ON ( l2.start = l.end )
WHERE l.student_id = 1 AND l.start >= '2010-04-26 09:00:00' AND l.end <= '2010-04-30 19:00:00' AND l2.end IS NOT NULL AND l2.end != l.start
GROUP BY l.start, l2.end
ORDER BY l.start, l2.start
我希望从中得到的结果是:
+---------------------+---------------------+
| start | end |
+---------------------+---------------------+
| 2010-04-26 09:00:00 | 2010-04-26 13:00:00 |
| 2010-04-26 13:15:00 | 2010-04-26 18:15:00 |
感谢您的帮助,谢谢 像这样的事情应该行得通 选择l2.start,l.end 来自学生讲座 左键加入学生_在l2上讲授l2。结束 在l.起点和l.终点之间 我从哪里开始 在“2010-04-26 00:00:00”和“2010-04-26 23:59:59”之间 从左开始分组
ORDER BY l.startax想出了迄今为止我所见过的最好的答案,那就是,重复的。另请参见.Does工作-但在我的resultset上执行需要1.8秒,而不是上面链接的
+---------------------+---------------------+
| start | end |
+---------------------+---------------------+
| 2010-04-26 09:00:00 | 2010-04-26 13:00:00 |
| 2010-04-26 13:15:00 | 2010-04-26 18:15:00 |