2011-07-18 230 views
1

我有一個表(開始,結束,typeid的)在一定時間間隔,這樣做某件事情:在一定時間間隔

... 
14:10:44 14:15:51 1 
14:12:33 14:18:42 2 
15:24:09 15:24:17 1 
... 

有一些規則:區間型ID 2個intersepts 1型的間隔。 而且處理後,我得到這樣的:

... 
14:10:44 14:18:42 <-- as a result of merging 
15:24:09 15:24:17 
... 

是否存在任何tehnics或方法這樣的數據?可能存在時間間隔的任何有用表示嗎?

P.S. SQL Server 2008 R2

回答

1

真的很難針對像你這樣的數據進行編碼。在現實生活中我已經看過幾次了。這裏有兩個想法。

declare @t table(low time, high time, type_id tinyint) 

insert @t values('14:10:44','14:15:51', 1) 
insert @t values('14:12:33','14:18:42', 2) 
insert @t values('15:24:09','15:24:17', 1) 

select low, coalesce(a.high, t.high) high 
from @t t 
cross apply (select min(high) high 
from @t t2 
where high > t.high and type_id = 2 
and not exists (select 1 from @t 
where t2.high between low and high and type_id = 2 and not 
(t2.high = high and t2.low = low))) a 
where type_id = 1 

這是另一種方法。根據您的數據,甚至可能會更好。

;with cte as 
(
select low low2, high, low 
from @t where type_id = 1 
union all 
select cte.high, t.high, cte.low 
from @t t 
join cte on cte.high > t.low 
and cte.high < t.high 
where t.type_id = 2 
) 
select low, max(high) high from cte group by low 

我假設低與type_id 1總是最低的集合。我還假設沒有重疊的行與type_id 1(及其子行),因爲這將是沒有意義的。

+0

謝謝!這正是我決定這個問題的原因......但我有大約9個defernt type id,他們有不同的行爲 - 他們可以拆分其他間隔,合併其他類型的間隔,交叉等等。所以我的存儲過程現在看起來像... m ...它看起來很大:о)。我甚至認爲它不會更好地代表一個時間間隔作爲一組秒,並與它一起工作如何一組行... –

+0

我必須看到與測試數據和預期結果的新問題 –