2017-01-23 8 views
0

開始時刻と終了時刻が一致すると、スケジュール部分のリストをより簡潔なリストに統合しようとすると、最悪の場合があります。以下のコードは1つのスケジュールのためのものであり、コードはユーザーにとってその時に起こっていることの参照です。TSQL - 連続したスケジュール部分からの統合スケジュールの作成

ご意見をいただければ幸いです!

declare @t as table (code int, dtDate DateTime, dtStart DateTime, dtEnd DateTime) 

insert into @t values 
(46,'2017-01-23','2017-01-23 06:00','2017-01-23 14:45'), 
(127,'2017-01-23','2017-01-23 07:30','2017-01-23 08:00'), 
(127,'2017-01-23','2017-01-23 08:00','2017-01-23 08:15'), 
(127,'2017-01-23','2017-01-23 08:15','2017-01-23 10:00'), 
(76,'2017-01-23','2017-01-23 10:00','2017-01-23 10:45'), 
(127,'2017-01-23','2017-01-23 10:45','2017-01-23 13:00'), 
(127,'2017-01-23','2017-01-23 13:00','2017-01-23 13:15'), 
(127,'2017-01-23','2017-01-23 13:15','2017-01-23 14:30') 

select * from @t 


-- Current Output 
code  dtDate     dtStart     dtEnd 
----------- ----------------------- ----------------------- ----------------------- 
46   2017-01-23 00:00:00.000 2017-01-23 06:00:00.000 2017-01-23 14:45:00.000 
127   2017-01-23 00:00:00.000 2017-01-23 07:30:00.000 2017-01-23 08:00:00.000 
127   2017-01-23 00:00:00.000 2017-01-23 08:00:00.000 2017-01-23 08:15:00.000 
127   2017-01-23 00:00:00.000 2017-01-23 08:15:00.000 2017-01-23 10:00:00.000 
76   2017-01-23 00:00:00.000 2017-01-23 10:00:00.000 2017-01-23 10:45:00.000 
127   2017-01-23 00:00:00.000 2017-01-23 10:45:00.000 2017-01-23 13:00:00.000 
127   2017-01-23 00:00:00.000 2017-01-23 13:00:00.000 2017-01-23 13:15:00.000 
127   2017-01-23 00:00:00.000 2017-01-23 13:15:00.000 2017-01-23 14:30:00.000 

-- Expected Output 
code  dtDate     dtStart     dtEnd 
----------- ----------------------- ----------------------- ----------------------- 
46   2017-01-23 00:00:00.000 2017-01-23 06:00:00.000 2017-01-23 14:45:00.000 
127   2017-01-23 00:00:00.000 2017-01-23 07:30:00.000 2017-01-23 10:00:00.000 
76   2017-01-23 00:00:00.000 2017-01-23 10:00:00.000 2017-01-23 10:45:00.000 
127   2017-01-23 00:00:00.000 2017-01-23 10:45:00.000 2017-01-23 14:30:00.000 
+0

は、あなたのロジックを説明します。 [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [** START **](http ://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を向上させ、より良い回答を得る方法を学ぼう。 –

答えて

0

は、古典的なギャップのよう&諸島

Select Code 
     ,dtDate 
     ,dtStart = min(dtStart) 
     ,dtEnd = max(dtEnd) 
From (
     Select * 
       ,Grp = Row_Number() over (Partition By Code,dtDate Order By dtStart) - Row_Number() over (Order by dtEnd) 
     From @t 
     ) A 
Group By Code,dtDate,Grp 
Order By min(dtStart) 

ルックス返し

enter image description here

関連する問題