sql - X 在一年的滚动 7 天窗口内的第一个实例
问题描述
我试图找到客户在滚动 7 天窗口内遇到错误的第一个实例。我计划使用它来查看客户在接下来的几天中的行为,例如他们是否下订单,或者他们是否有很长一段时间才能返回现场。
所以我想要的是一个包含以下内容的表格:
Customer, Date, ReceiptID
Jack, 07/05/2018 , 223A
这是 7 天窗口内的第一个实例。然后他在 2018 年 9 月 5 日再次遇到了这个错误,我们不计算在内,因为它在第一个错误的 7 天内。
然后他在 2018 年 8 月 18 日遇到了一个错误,我希望将其包含在我的结果中。
考虑到客户理论上可能在 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 天”期间,因为这些报告没有更大的差距。
推荐阅读
- c# - 如果单击 Button,则选择 ListView 中的下一项。怎么做?
- nlp - 有什么方法可以更快地计算 gensim WmdSimilarity
- java - NodeManager 和 ResourceManager 进程不启动
- android - RecyclerView 不显示从列表通过 Bundle 传递的数据
- class - 定义类的点
- stripe-payments - 允许用户在 Stripe 中处理定期付款时编辑卡信息
- java - FirebaseVisionImage:变量“图像”可能尚未初始化
- java - 如何在底部导航中显示图像视图 [Android]
- c++ - 将每个线程分配给具有超过 64 个内核的 CPU 上自己的逻辑内核
- android - Android Kotlin - 如何检测和读取收到的短信