SQL Server:让所有行彼此相隔 10 分钟

Posted

技术标签:

【中文标题】SQL Server:让所有行彼此相隔 10 分钟【英文标题】:SQL Server: Getting all rows 10 minutes from each other 【发布时间】:2017-12-02 14:02:02 【问题描述】:

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

这里是:

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

换句话说,我在 Y(分钟/秒)中捕获了访问超过 X 个文档的人,向我显示该人访问的文档。

最好不要汇总数据,而只保留一个计算 ROW_NUMBER() OVER 或 Count(*) OVER 之类的数据。

这是一个例子:

【问题讨论】:

***.com/a/46331544/73226 【参考方案1】:

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

【讨论】:

嗨,戈登。谢谢!。但这对我没有帮助,我需要所有的行。如果它需要自我加入,那就这样吧。一个用户可以在 10 分钟内访问多个文档,上述分区不支持。我可以从分区中删除“文档”列并获得所需的结果吗?

以上是关于SQL Server:让所有行彼此相隔 10 分钟的主要内容,如果未能解决你的问题,请参考以下文章

[转帖]SQL Server 10分钟理解游标

sql server 以10分钟分组 统计人数

Java Spring 将 Excel 导入 SQL Server

JAVA判断两个时间戳,相隔多少分钟

sql server:取当前时间前10分钟之内的数据 dateadd()

SQL Server:使用聚合运算符 COUNT() 打印左表中的所有行