嗨,我有一个无法解决的SQL问题。我不确定这是否是可以在常规基于集合的操作中解决的问题。
这就是:
我有一张表,其中每一行都是文档的视图。我需要找到行之间的日期彼此相差10x分钟的行。想象一个人在10分钟内访问文档13次(10秒内10次),我需要找到这些行和执行此操作的人。
我用其他话来抓住Y(Min / Sec)中访问超过X个文档的人,向我显示该人访问的文档。
最好不要聚合数据,但只有一个计算类似ROW_NUMBER()OVER或Count(*)OVER。
以下是一个例子:
答案 0 :(得分:0)
SQL Server中最简单的方法可能是使用lead()
和适当的参数:
select t.*
from (select t.*,
lead(happened, 12) over (partition by userkey, document order b happened) as next_happened_12
from t
) t
where next_happened_12 < dateadd(minute, 10, happened);
论证是 - 1。
这不会在10分钟内获得所有行。这需要自我加入,而且可能非常昂贵。 lead()
应该更有效率,并且可以利用(userkey, document, happened)
上的索引。