2012-09-06 21 views
0

我有一個臨時表,其結構如下。基於T-SQL登錄狀態的TimeSpan計算

create table #temptime 
(
    logtime datetime, 
    [status] varchar(3) 
) 

從上面可以看到,我有logintime和status。我需要根據狀態對日期進行分區。我需要計算這兩個創建的分區之間的時間間隔,並進行合併以查找用戶在此前提下的時間。

例如,讓我們說我們有4條

Partition based on status IN  Partition based in status OUT 

8:45 AM         10:45 AM 
11:00 AM        15:00 PM 

現在方案應該找時間跨度

10:45 AM - 8:45 AM = 2 Hours + 11:00 Am - 15:00 PM = 4 Hours 

請告訴我完成這個任務的最佳方法是什麼?

感謝

回答

3

試試這個:

;with cte_IN as (select logtime,ROW_NUMBER() 
         over (partition by [status] order by logtime) row_num 
from #temptime 
where [status]='IN'), 
cte_OUT as (select logtime,ROW_NUMBER() 
         over (partition by [status] order by logtime) row_num 
from #temptime 
where [status]='OUT') 
select i.logtime,O.logtime,DATEDIFF(MI,i.logtime,O.logtime)/60.0 as 'hours' 
from cte_IN I 
join cte_OUT O 
on I.row_num=O.row_num 


SQL Fiddle Demo

+0

喬,它的工作。謝謝。 – user14750

+0

@ user14750:如果你有答案,請接受答案.. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –