我有一个表,在其中需要为每个组标记不同交易的数量。如果两次后续交易之间的天数少于7天,则将其视为同一笔交易,否则视为另一笔交易。
我的tx_data表如下:
User tx_Dt
A 1/10/2018
A 1/10/2018
A 1/10/2018
A 1/11/2019
A 1/11/2019
A 1/11/2019
A 1/12/2019
A 1/12/2019
D 1/29/2019
D 2/4/2019
D 2/5/2019
E 12/14/2019
E 12/14/2019
E 12/16/2019
E 12/28/2019
所需的输出是:
User tx_Dt tx_tag
A 1/10/2018 1
A 1/10/2018 1
A 1/10/2018 1
A 1/11/2019 2
A 1/11/2019 2
A 1/11/2019 2
A 1/12/2019 2
A 1/12/2019 2
D 1/29/2019 1
D 2/4/2019 1
D 2/5/2019 1
E 12/14/2019 1
E 12/14/2019 1
E 12/16/2019 1
E 12/28/2019 2
我已经尝试了多种情况,例如,sum()over(按按分区划分),内部联接,但无法启动一个计数器,该计数器会在每个组上逐级重新初始化。
答案 0 :(得分:0)
使用lag()
和累计金额:
select t.*,
sum(case when prev_tx_dt > date_add(tx_dt, -7) then 0 else 1 end) over (partition by user order by tx_dt) as tx_tag
from (select t.*,
lag(tx_Dt) over (partition by user order by tx_Dt) as prev_tx_dt
from t
) t;