Date 配置单元窗口函数-值中的行更改
我有一个id/标志和日期字段的数据 我需要以下面的方式填充flag_date字段Date 配置单元窗口函数-值中的行更改,date,hive,window,Date,Hive,Window,我有一个id/标志和日期字段的数据 我需要以下面的方式填充flag_date字段 login_date id flag flag_date 5/1/2018 100 N NULL 5/2/2018 100 N NULL 5/3/2018 100 Y 5/3/2018 5/4/2018 100 Y 5/3/2018 5/5/2018
login_date id flag flag_date
5/1/2018 100 N NULL
5/2/2018 100 N NULL
5/3/2018 100 Y 5/3/2018
5/4/2018 100 Y 5/3/2018
5/5/2018 100 Y 5/3/2018
5/6/2018 100 N NULL
5/7/2018 100 N NULL
5/8/2018 100 Y 5/8/2018
5/9/2018 100 Y 5/8/2018
5/10/2018 100 Y 5/8/2018
当标志值更改为N到Y时,标志日期值相应更改。
请帮忙
select login_date
,id
,flag
,case when flag = 'Y' then min(login_date) over(partition by id,grp) end as flag_date
from (select login_date,id,flag
,row_number() over(partition by id order by login_date) -
row_number() over(partition by id,flag order by login_date) as grp
from tbl
) t
- 首先将行分类为组,即连续的“Y”和“N”在序列断开时开始一个新值。这可以通过行数差异的方法来实现。(运行内部查询以查看如何分配组号)
- 一旦分配了组,就可以通过条件聚合计算flag_date
select login_date
,id
,flag
,case when flag = 'Y' then min(login_date) over(partition by id,grp) end as flag_date
from (select login_date,id,flag
,sum(case when flag = 'N' then 1 else 0 end) over(partition by id order by login_date) as grp
from tbl
) t