ID START_TIME END_TIME
100 10:00 12:00
100 10:15 12:30
100 12:15 12:45
100 13:00 14:00
200 10:15 10:30
Вопрос: Напишите (предпочтительно куст) SQL запрос, чтобы создать новое поле group_id
, которое идентифицирует записи в каждом ID
с перекрывающимися интервалами start_time
и end_time
. Приемлемое решение будет иметь уникальный group_id
для каждого ID
и перекрывающихся наборов интервалов. Требуемый пример:
ID START_TIME END_TIME GROUP_ID
100 10:00 12:00 1
100 10:15 12:30 1
100 12:15 12:45 1
100 13:00 14:00 2
200 10:15 10:30 3
Дополнительная информация: Для данного ID
, если какой-либо из его интервалов перекрывается, соответствующие записи принадлежат к той же группе и, следовательно, должны иметь одинаковые group_id
. Запись A перекрывает другую запись B, когда A * start_time
и / или end_time
находится между B start_time
и end_time
.
В этом примере ID
= 100 имеет четыре интервала. Первые три перекрываются => вторая запись перекрывается с первой (start_time
из 10:15 находится между start_time
и end_time
от 10:00 до 12:00), а третья перекрывается со второй ( start_time
от 12:15 находится между start_time
и end_time
от 10:15 до 12:30). Из-за этого все они имеют одинаковое group_id
из 1. Четвертый интервал для ID
= 100 не перекрывает другие интервалы в этом ID
, и поэтому он становится своей собственной группой с новым group_id
. Последняя запись имеет совершенно другой ID
, и поэтому она начинает третью группу также с новым group_id
.