2013-03-08 4 views
2

모든 행에 대해 현재 행의 시작 날짜와 종료 날짜 사이에 시작하는 이벤트 수를 계산하기 위해 over 함수를 사용하려고합니다. 나는. 동시 카운터. 궁극적으로 하루 또는 시간당 최대 동시 이벤트를 찾으려고합니다.SQL - Over 절 2 번 범위

select FingerPrint 
     ,StartDate 
     ,EndDate 
     ,Num_ConCurrent = count(FingerPrint) over (
                partition by StartDate 
                order by StartDate 
                range between StartDate PRECEDING and EndDate following 
     ) 
from #File 
group by  FingerPrint 
      ,StartDate 
      ,Enddate 

불행히도 이것은 작동하지 않습니다. 내가 단순히 자기 조인을 사용할 수 있다는 것을 알고는 있지만, over 절을 가진 대체 방법이있을 거라고 생각했습니다.

도움을 주시면 감사하겠습니다.

NB : 오류 메시지

메시지 102, 수준 15, 상태 1, 가까운 7 호선의 구문이 잘못되었습니다 '의 startDate'.

+2

SQL Server의 버전을 태그하십시오. –

답변

0

over 절의 Range 매개 변수는 열 참조가 아닌 정수 값을 찾고 있습니다. over 절을 사용하여이를 수행 할 수있는 방법이있을 수 있지만 그 중 하나를 작동시키지 못했습니다.

내 경험에 의하면, 범위 내 날짜에 자체 참가가 매우 느리고 속도를 높이기 위해 올바른 색인 집합을 찾지 못했습니다. 이 경우에는 인라인 서브 쿼리에서만 사용합니다.

select FingerPrint, 
     StartDate, 
     EndDate, 
     (select count(FingerPrint) 
     from #File F2 
     where F2.StartDate between F.StartDate and F.EndDate 
     ) 
     as Num_ConCurrent 
     ) 
from #File F 

일부 약속 데이터에 대한 테스트와이 메서드를 사용하여 32,000 개의 약속 행이 즉시 실행됩니다. 셀프 조인은 내가 멈추기까지 15 초 동안 뛰었습니다.