SQL - OVER 子句范围在 2 次之间
Posted
技术标签:
【中文标题】SQL - OVER 子句范围在 2 次之间【英文标题】:SQL - OVER Clause range between 2 times 【发布时间】:2013-03-08 15:17:16 【问题描述】:我正在尝试使用 over 函数来计算在所有行的当前行的开始日期和结束日期之间开始的事件数。 IE。并发计数器。最终,我将寻找每天或每小时的最大并发事件等。
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 子句可能有另一种方法。
非常感谢任何帮助。
注意:错误消息
消息 102,级别 15,状态 1,第 7 行 'StartDate' 附近的语法不正确。
【问题讨论】:
请标记 SQL Server 的版本。 【参考方案1】: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 秒,然后我停止了它。
【讨论】:
以上是关于SQL - OVER 子句范围在 2 次之间的主要内容,如果未能解决你的问题,请参考以下文章
SQL - 在 WHERE 子句中使用日期范围的结果集中未显示正确日期