2017-01-23 63 views
0

我有絕對最差的時間試圖將計劃部分列表合併到開始和結束時間匹配的更簡潔列表中。下面的代碼是針對一個時間表的,代碼是當時對用戶發生的事情的參考。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