我试图找到客户在滚动 7 天窗口内遇到错误的第一个实例。我计划使用它来查看客户在接下来的几天内的行为,例如他们是否下订单,或者他们是否在返回现场之前有很长一段时间。
因此,我希望得到的是一个包含以下内容的表格:
Customer, Date, ReceiptID
Jack, 07/05/2018 , 223A
这是 7 天窗口内的第一次。然后他在 09/05/2018 再次遇到该错误,我们不计算在内,因为它是在第一个错误后的 7 天内。
然后他在 18/08/2018 上遇到了一个错误,我想将其包含在我的结果中。
考虑到客户理论上可能在 7 天内遇到 30 多个错误,是否可以简单地在 SQL Server 中执行此操作?
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 天"时间段,因为这些报告没有更大的间隔。