2012-10-30 41 views
0

這裏是數據庫的一部分:計算會話TIMERANGE之間TSQL

SessionID SessionStartTime    SessionCloseTime 
24  2012-10-16 01:00:06.000   2012-10-16 01:01:22.000 
24  2012-10-16 01:00:08.000   2012-10-16 01:01:10.000 
24  2012-10-16 01:00:16.000   2012-10-16 01:01:12.000 
24  2012-10-16 01:00:30.000   2012-10-16 01:01:48.000 
24  2012-10-16 01:00:41.000   2012-10-16 01:02:08.000 
24  2012-10-16 01:00:48.000   2012-10-16 01:01:34.000 
24  2012-10-16 01:00:56.000   2012-10-16 01:03:09.000 
24  2012-10-16 01:01:02.000   2012-10-16 01:02:13.000 
24  2012-10-16 01:01:05.000   2012-10-16 01:03:16.000 
24  2012-10-16 01:01:09.000   2012-10-16 01:02:42.000 
24  2012-10-16 01:01:15.000   2012-10-16 01:02:48.000 
24  2012-10-16 01:01:18.000   2012-10-16 01:02:14.000 
24  2012-10-16 01:01:18.000   2012-10-16 01:02:06.000 
24  2012-10-16 01:01:42.000   2012-10-16 01:03:16.000 
24  2012-10-16 01:01:45.000   2012-10-16 01:03:04.000 

我想添加一個新的列到這個表命名爲SessionCount,然後我就可以看到通話峯值我的意思是最大計數發生在同一時間的會話。

此表應該是這樣的:

SessionID SessionStartTime    SessionCloseTime   SessionCount 
24  2012-10-16 01:00:06.000   2012-10-16 01:01:22.000  1 
24  2012-10-16 01:00:08.000   2012-10-16 01:01:10.000  2 
24  2012-10-16 01:00:16.000   2012-10-16 01:01:12.000  3 
24  2012-10-16 01:00:30.000   2012-10-16 01:01:48.000  4 
24  2012-10-16 01:00:41.000   2012-10-16 01:02:08.000  5 
24  2012-10-16 01:00:48.000   2012-10-16 01:01:34.000  6 
24  2012-10-16 01:00:56.000   2012-10-16 01:03:09.000  7 
24  2012-10-16 01:01:02.000   2012-10-16 01:02:13.000  8 
24  2012-10-16 01:01:05.000   2012-10-16 01:03:16.000  9 
24  2012-10-16 01:01:09.000   2012-10-16 01:02:42.000  10 
24  2012-10-16 01:01:15.000   2012-10-16 01:02:48.000  10 
24  2012-10-16 01:01:18.000   2012-10-16 01:02:14.000  11 
24  2012-10-16 01:01:18.000   2012-10-16 01:02:06.000  11 
24  2012-10-16 01:01:42.000   2012-10-16 01:03:16.000  7 
24  2012-10-16 01:01:45.000   2012-10-16 01:03:04.000  7 

所以在這個表中有最多11個通話峯值發生在同一時間,在1時01分18秒。在01:01:18有11個正在進行的通話。當會話處於活動狀態時,我如何計算會話,然後在會話完成時+1,然後是-1?

+0

相同,您剛纔的問題[如何計算最大傳入呼叫峯?](http://stackoverflow.com/questions/13044565/how-to -calculate-maximum-incoming-call-peaks)你只需編輯輸出列 – podiluska

+0

是的,我知道,但我必須更新這個表,我需要插入一個新的列。結果相同但計算方法不同。我檢查了你的答案,這是我想要的,但無法解決問題,因爲我在這個問題中提出了問題。 – cihata87

回答

1

擴大在以前的答案...

;with ids as 
(
    select *, ROW_NUMBER() over (order by sessionstarttime, sessionclosetime) rid from @t 
), 
cte as 
(
    select SessionStartTime as ChangeTime, 1 as CC, rid from ids  
    union all 
    select SessionCloseTime as ChangeTime, -1 as CC, rid from ids  

) 
    select ids.id, ids.SessionStartTime,ids.SessionCloseTime, rt 
    from 
     ids 
     inner join 
    (
    select cc,rid, changetime,rt from cte 
     cross apply 
     (select SUM(cc) as rt from cte c where c.changetime<=cte.changetime) rt    
    ) res 
     on ids.rid=res.rid 
    where CC=1 
    order by SessionStartTime 
+0

謝謝你這麼爛Podiluska – cihata87