繁体   English   中英

Hive/SQL 如何访问刚刚为前几行计算的列的值?

[英]Hive/SQL How do you access the value of the column which you just computed for previous rows?

我有一个表uv_user_date看起来像这样: 在此处输入图像描述

它基本上是一个user log in table ,显示按 user_id 分区的累积登录天数。 并且该列pre显示用户登录记录的最后登录日期。

基于此我想计算每个用户记录的连续登录天数。

答案应该是: 在此处输入图像描述 我的想法是:为了记录

  • 如果(uv_date - pre = 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)的值

首先找出日期差异

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

那么每个user_id的累积差异和accumulative_uv_date之间的差异,你想用它作为排名

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM