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 分钟的主要内容,如果未能解决你的问题,请参考以下文章
Java Spring 将 Excel 导入 SQL Server