我正在尝试查找客户在滚动7天的窗口内遇到错误时的第一个实例。我正计划使用它来查看客户在接下来几天的行为,例如他们是否下了订单,或者距离返回现场还有很长一段时间?
所以我要获取的是一个包含以下内容的表:
Customer, Date, ReceiptID
Jack, 07/05/2018 , 223A
这是7天之内的第一个实例。然后,他在2018年9月5日再次遇到该错误,我们不算这个错误,因为它在第一个错误的7天内。
然后他在2018年8月18日遇到一个错误,我希望将此错误包含在我的结果中。
考虑到客户,理论上在7天的时间内可能会遇到30多个错误,是否可以在SQL Server中简单地做到这一点?
答案 0 :(得分:0)
您可以使用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天”期间,因为这些报告之间没有更大的差距。