有没有一种方法可以基于Hive / SQL中的条件来初始化计数器?

时间:2020-03-05 16:43:51

标签: mysql sql hive hiveql gaps-and-islands

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

1 个答案:

答案 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;