Разделить перекрывающиеся даты на разные записи
Я занимаюсь разработкой приложения PHP + MySQL. У меня есть таблица, которая содержит дату начала и дату окончания периодов. Периоды могут перекрываться. Пример:
ID Start End
1 01/05/2015 31/05/2015
2 01/06/2015 30/06/2015
3 15/06/2015 25/06/2015 (this record overlaps record with ID 2)
4 17/06/2015 22/06/2015 (this record overlaps records with IDs 2 and 3)
Мне нужно выбрать все записи, упорядочить по дате начала и дате окончания, а также разделить перекрывающиеся записи и сохранить их идентификаторы. Что я имею в виду, мне нужно получить это в конце концов:
ID Start End
1 01/05/2015 31/05/2015
2 01/06/2015 14/06/2015
3 15/06/2015 16/06/2015
4 17/06/2015 22/06/2015
3 23/06/2015 25/06/2015
2 26/06/2015 30/06/2015
Я могу сделать это, выбрав все периоды, а затем отсортировав / разделив их в PHP, но мне интересно, могу ли я сделать это на уровне базы данных?
Может кто-нибудь хотя бы указать мне правильное направление, пожалуйста?
1 ответ
Я думаю, что вы должны сделать это PHP (или, может быть, процедура DB, но я бы не стал делать это на уровне DB), это будет проще. Есть много комбинаций, которые вы должны рассмотреть, и они не могут вписаться в один оператор SQL.
Вот пример того, как обнаружить совпадения (по крайней мере, так я могу вам помочь):
SELECT t1.id, t1.start, t1.id, t2.id
FROM T t1, T t2
WHERE (t2.start BETWEEN t1.start AND t1.end
OR t2.end BETWEEN t1.start AND t1.end)
AND t2.id > t1.id