有没有一种方法可以根据hive/sql中的条件初始化计数器?

camsedfj  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(255)

我有一个表,其中我需要为每个组标记不同事务的编号。如果两个后续交易之间的天数少于7天,则视为同一交易,否则视为不同的交易。
我的tx\u数据表如下所示:

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

我试过很多方法,比如case-when、sum()over(partition by order by)、内部连接,但都没能启动一个计数器,在每个组中按级别重新初始化。

hrirmatl

hrirmatl1#

使用 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;

相关问题