sql - 根据条件对后续条目进行分组
问题描述
我有这个 sql 挑战,我很乐意得到帮助:
挑战是:给定交易列表,我必须将多个交易视为有一个,但前提是两个后续交易之间的时间段少于 2 周。
例如,如果客户进行了 3 次交易,
- 第一个在 01.05.2020,
- 第二个在 08.05.2020
- 第三个在 20.05.2020 - 所有三个都应该被视为同时发生,
由于每 2 个后续条目之间的间隔不到 2 周。
如果第四次交易发生在 2020 年 7 月 20 日,则应单独处理,因为这一次与前一次之间有两个多星期的时间。
解决方案
lag()
您可以使用和累积总和来识别组:
select t.*,
sum(case when prev_datetime > datetime - interval '14 day' then 0 else 1 end) over (partition by customer order by datetime) as transaction_group
from (select t.*, lag(datetime) over (partition by customer order by datetime) as prev_datetime
from t
) t;
众所周知,日期时间函数依赖于数据库。因此,您的数据库上的确切日期/时间函数可能会有所不同。但想法是一样的。
推荐阅读
- verilog - ModelSim 中的错误,“=”附近:语法错误,意外的“=”。在“Y”之后的范围内发现语法错误。是否缺少'::'?
- python - 解决 AWS Glue 中的并发限制
- eclipse - 在 STS 和 Eclipse 中调试?
- javascript - Firebase:从存储中获取 JSON 文件的内容
- java - 无法定位元素:{"method":"xpath","selector":"path"}
- python - 带代理的 Selenium Webdriver
- azure - SSL 证书问题:无法获取本地颁发者证书 AZURE DEVOPS
- python - 如何在 Python 中一一访问 3D numpy 数组的所有列?
- ios - iOS 14.5 - [Assert] 有人在搜索栏可见时删除了活动的搜索控制器
- python - 使用 selenium .click() 时,“到达日期”按钮没有反应