hive:根据标志获取开始和结束日期

aiazj4mn  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(294)

我的table如下。我正在计算购买的天数

Visitorid   date    Purch_flag
A           1-May       NULL
A           2-May       NULL
A           3-May        1  
B           1-May       NULL
B           2-May        1  
B           3-May       NULL
B           4-May        1  
C           1-May       NULL

理想情况下,我想创建一个输出表如下,其中有开始和结束日期。对于同一个visitorid,购买后将有一个新的开始日期

Visitorid   date    Purch_flag  start_date   end_date
A           1-May       NULL    1-May        3-May
A           2-May       NULL    1-May        3-May
A           3-May        1      1-May        3-May
B           1-May       NULL    1-May        2-May
B           2-May        1      1-May        2-May
B           3-May       NULL    3-May        4-May
B           4-May        1      3-May        4-May
C           1-May       NULL     NULL        NULL
kh212irz

kh212irz1#

我想你可以用累积的 max() 以及 min() 窗口功能:

select t.*,
       coalesce(max(case when purch = 1 then date end) over (partition by visitorid order by date asc rows between unbounded preceding and 1 preceding),
                min(date) over (partition by visitorid)
               ) as start_date
       min(case when purch = 1 then date end) over (partition by visitorid order by date desc) as end_date
from t;

结束日期更容易解释。它是在给定记录上或之后进行购买的日期的最小值。
开始日期是在给定日期之前购买的日期的最大值。如果是的话 NULL ,则是访客的第一个日期。

相关问题