2013-03-08 39 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版本。 – 2013-03-08 15:21:42

回答

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秒。