首页 > 解决方案 > 根据条件对后续条目进行分组

问题描述

我有这个 sql 挑战,我很乐意得到帮助:

挑战是:给定交易列表,我必须将多个交易视为有一个,但前提是两个后续交易之间的时间段少于 2 周。

例如,如果客户进行了 3 次交易,

由于每 2 个后续条目之间的间隔不到 2 周。

如果第四次交易发生在 2020 年 7 月 20 日,则应单独处理,因为这一次与前一次之间有两个多星期的时间。

标签: sql

解决方案


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;

众所周知,日期时间函数依赖于数据库。因此,您的数据库上的确切日期/时间函数可能会有所不同。但想法是一样的。


推荐阅读