X 在一年的连续 7 天 window 内的第一个实例

First instance of X within a rolling 7 day window for a year

我试图找到客户在 7 天内遇到错误的第一个实例 window。我打算用它来查看客户在接下来几天的行为,例如他们是下订单,还是在返回站点之前有很长一段时间。

所以我想要得到的是 table,其中包含:

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

这是 7 天内的第一个实例 window。然后他在 09/05/2018 再次遇到该错误,我们不计算在内,因为它是在第一次遇到错误后的 7 天内。

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

考虑到客户理论上可能在 7 天内遇到超过 30 个错误 window,是否可以在 SQL 服务器中简单地执行此操作?

您可以使用 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 天”时间段,因为这些报告没有更大的间隔。