Это вопрос вроде: TSQL get overlapping periods from datetime ranges, но с другим запросом на результат.TSQL получить уникальные (не перекрывающиеся) диапазоны дат-времени
Это таблица:
create table period (
id int,
starttime datetime,
endtime datetime,
type varchar(64)
);
insert into period values (1,'2013-04-07 8:00','2013-04-07 13:00','Work');
insert into period values (2,'2013-04-07 14:00','2013-04-07 17:00','Work');
insert into period values (3,'2013-04-08 8:00','2013-04-08 13:00','Work');
insert into period values (4,'2013-04-08 14:00','2013-04-08 17:00','Work');
insert into period values (5,'2013-04-07 10:00','2013-04-07 11:00','Holyday'); /* 1h overlapping with 1*/
insert into period values (6,'2013-04-08 10:00','2013-04-08 20:00','Transfer'); /* 6h overlapping with 3 and 4*/
insert into period values (7,'2013-04-08 11:00','2013-04-08 12:00','Test'); /* 1h overlapping with 3 and 6*/
Я нужен уникальным не перекрывающихся даты и времени Таблица диапазонов.
В до примере результат будет:
'2013-04-07 08:00','2013-04-07 13:00'
'2013-04-07 14:00','2013-04-07 17:00'
'2013-04-08 08:00','2013-04-08 20:00'
Это не очень важно, если может быть фрагментация времени, такие как:
'2013-04-08 08:00','2013-04-08 13:00'
'2013-04-08 12:00','2013-04-08 20:00'
--EDIT--
Другой пример:
create table period (
id int,
starttime datetime,
endtime datetime,
type varchar(64)
);
insert into period values (1,'2013-06-13 8:30','2013-06-13 12:30','');
insert into period values (2,'2013-06-13 8:38','2013-06-13 12:38','');
insert into period values (3,'2013-06-13 13:18','2013-06-13 17:45','');
insert into period values (4,'2013-06-13 13:30','2013-06-13 17:30','');
insert into period values (5,'2013-06-13 20:00','2013-06-13 23:59','');
это должно вернуться:
2013-06-13 08:30 - 2013-06-13 12:38
2013-06-13 13:18 - 2013-06-13 17:45
2013-06-13 20:00 - 2013-06-13 23:59
Может быть, мой вопрос не ясно, я не нужен не дублируют друг друга из данной таблицы, но накидной набор данной таблицы без перекрытия диапазонов (например, такие строки: 08: 00-10: 00 и 09: 00-11: 00 стал 08: 00-11: 00 или с фрагментацией 08: 00-10: 00 и 10: 00-11: 00). – Tobia
Я не могу это понять, но это работает :-) – Tobia
Существует небольшая ошибка, когда я добавляю неперекрывающийся диапазон, но последовательно, здесь (вставка вставки вызывает ошибку): http://sqlfiddle.com/#!6/ecc46/1 – Tobia