是否可以根据Hive / SQL中的条件初始化计数器?

问题描述 投票:0回答:1

我有一个表,在其中需要为每个组标记不同交易的数量。如果两次后续交易之间的天数少于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(按按顺序划分),内部联接,但无法启动一个计数器,该计数器会在每个组上逐级重新初始化。

mysql sql hive hiveql
1个回答
0
投票

使用lag()和累计和:

select t.*,
       sum(case when 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;
© www.soinside.com 2019 - 2024. All rights reserved.