У меня есть таблица выглядит следующим образом:В поисках «свободный» раза в MySQL
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 утра, 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 11:00:00 |
| 2010-04-26 10:00:00 | 2010-04-26 12:00:00 |
| 2010-04-26 10:00:00 | 2010-04-26 13:00:00 |
| 2010-04-26 13:15:00 | 2010-04-26 16:15:00 |
| 2010-04-26 14:15:00 | 2010-04-26 16:15:00 |
| 2010-04-26 15:15:00 | 2010-04-26 17:15:00 |
| 2010-04-26 16:15:00 | 2010-04-26 18:15:00 |
...etc...
Выход Я ищу из этого будет:
+---------------------+---------------------+
| 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 |
Любая помощь приветствуется , благодаря!
дубликат http://stackoverflow.com/questions/964288/flattening-intersecting-timespans. см. также http://explainextended.com/2009/06/13/flattening-timespans-mysql/. –