hive/sql如何访问刚才为前几行计算的列的值?

yxyvkwin  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(436)

我有一张table uv_user_date 看起来像这样:

基本上是 user log in table 它显示了按用户id划分的累计登录天数 pre 显示用户登录记录的上次登录日期。
基于此,我想计算每个用户记录的连续登录天数。
答案应该是:

我的想法是:记录在案
如果(uv\ U日期-前=1天)
则连续登录天数是最后一个连续登录天数+1
其他
1但是我在访问 last consecutive login days 价值观。
代码是:

SELECT *,
   if(pre = date_add(uv_date, -1), last(consecutive_days) + 1, 1) consecutive_days
FROM uv_user_date

有没有办法得到 last(consecutive_days)

xzabzqsa

xzabzqsa1#

首次查找日期差异

tbl1:
select *, 
       if(pre = NULL, 1, datediff(uv_date, pre)) as diff
  from your_table

然后将每个用户id的累计差值和累计日期之差作为秩

tbl2:
select *, 
sum(diff) over (partition by user_id order by uv_date rows between unbounded preceding and current) - accumulative_uv_date as rnk
   from tbl1

最后,数一数连续的天数

select user_id, uv_date, rnk
row_number() over (partition by user_id, rnk order by uv_date) as consecutive_days
  from tbl2

相关问题