SQL Server:使所有行彼此相距10分钟

时间:2017-12-02 14:02:02

标签: sql sql-server performance

嗨,我有一个无法解决的SQL问题。我不确定这是否是可以在常规基于集合的操作中解决的问题。

这就是:

我有一张表,其中每一行都是文档的视图。我需要找到行之间的日期彼此相差10x分钟的行。想象一个人在10分钟内访问文档13次(10秒内10次),我需要找到这些行和执行此操作的人。

我用其他话来抓住Y(Min / Sec)中访问超过X个文档的人,向我显示该人访问的文档。

最好不要聚合数据,但只有一个计算类似ROW_NUMBER()OVER或Count(*)OVER。

以下是一个例子:

Table

1 个答案:

答案 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)上的索引。