TSQL

2012-10-30 5 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시 1분 18초에서 같은 시간에 무슨 일이 있었있다. 01:01:18에 11 개의 활성 통화가 있습니다. 세션이 활성화되었을 때 세션을 계산 한 다음 세션이 완료되면 -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