SQL - OVER子句范围在2次之间



我试图使用over函数来计算所有行当前行的开始和结束日期之间开始的事件数量。即并发计数器。最终,我将寻找每天或小时等的最大并发事件。

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: Error Message

Msg 102,第15层,状态1,第7行'StartDate'附近语法错误。

over子句中的Range参数查找的是整数值,而不是列引用。也许有一种方法可以用over子句,但我也不能让它工作。

根据我的经验,在一个范围内的日期上进行自连接是非常慢的,我还没有找到合适的索引集来加速它。在这种情况下,我只使用In inline子查询。

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行约会。

最新更新