Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 配置单元窗口函数-值中的行更改_Date_Hive_Window - Fatal编程技术网

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

我有一个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        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
解决此问题的另一种方法是在遇到“N”值时生成一个新组。外部查询保持不变,只有内部查询更改

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