Объедините список интервалов из двух таблиц - PullRequest
0 голосов
/ 27 августа 2018

Требуется MS SQL Query для генерации результата, как показано ниже:

TABLE 1 Содержит список почасовых дат начала и окончания. Другая таблица, TABLE 2 содержит список дат начала и окончания времени простоя. Требуемый результат - список всех дат, как показано в таблице RESULT.

ТАБЛИЦА 1

  StartTime                EndTime
2018-08-27 08:00:00  2018-08-27 09:00:00  
2018-08-27 09:00:00  2018-08-27 10:00:00  
2018-08-27 10:00:00  2018-08-27 11:00:00  
2018-08-27 11:00:00  2018-08-27 12:00:00  
2018-08-27 12:00:00  2018-08-27 13:00:00

ТАБЛИЦА 2

  StartTime               EndTime
2018-08-27 08:25:00  2018-08-27 08:30:00
2018-08-27 10:20:00  2018-08-27 10:30:00

РЕЗУЛЬТАТ

   StartTime                EndTime
2018-08-27 08:00:00  2018-08-27 08:25:00
2018-08-27 08:25:00  2018-08-27 08:30:00
2018-08-27 08:30:00  2018-08-27 09:00:00
2018-08-27 09:00:00  2018-08-27 10:00:00
2018-08-27 10:00:00  2018-08-27 10:20:00 --<< see changes
2018-08-27 10:20:00  2018-08-27 10:30:00 --<< period 10:00-11:00 got split
2018-08-27 10:30:00  2018-08-27 11:00:00 --<< as per 10:20-10:30 period from table2
2018-08-27 11:00:00  2018-08-27 12:00:00
2018-08-27 12:00:00  2018-08-27 13:00:00

1 Ответ

0 голосов
/ 27 августа 2018

Я бы посоветовал объединить все время начала и окончания, а затем строить интервалы, используя INNER JOIN или LEAD (в более новых версиях SQL-сервера) Смотрите демо-версию

; with inputs  as
( select t=starttime from table1
 union 
 select t=endtime from table1
 union 
 select t=starttime from table2
 union
 select t=endtime from table2
 ),
  map as 
 (
     select starttime=t, endtime=lead(t) over ( order by t) 
     from inputs
  )

 select * from map 
 where endtime is not null
 order by starttime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...