首页 > 解决方案 > X 在一年的滚动 7 天窗口内的第一个实例

问题描述

我试图找到客户在滚动 7 天窗口内遇到错误的第一个实例。我计划使用它来查看客户在接下来的几天中的行为,例如他们是否下订单,或者他们是否有很长一段时间才能返回现场。

所以我想要的是一个包含以下内容的表格:

Customer, Date, ReceiptID
Jack, 07/05/2018 , 223A        

这是 7 天窗口内的第一个实例。然后他在 2018 年 9 月 5 日再次遇到了这个错误,我们不计算在内,因为它在第一个错误的 7 天内。

然后他在 2018 年 8 月 18 日遇到了一个错误,我希望将其包含在我的结果中。

考虑到客户理论上可能在 7 天的时间内遇到了 30 多个错误,是否可以简单地在 SQL Server 中执行此操作?

标签: sqlsql-serversliding-window

解决方案


您可以使用lag()从前一个报告中获取 7 天以上的报告:

select b.*
from (select b.*,
             lag(date) over (partition by customer order by date) as prev_date
      from bugs b
     ) b
where prev_date is null or prev_date < dateadd(day, -7, date);

请注意,如果您有诸如 1-6-12-18-24 之类的序列,那么这将算作一个“7 天”期间,因为这些报告没有更大的差距。


推荐阅读