下面是我创建的WITH语句的结果:
id prodid start end lead lag rnk_prod_first rnk_prod_last
1 4654 2/26/19 4/5/19 y null 1 7
1 4655 5/20/19 8/1/19 y y 2 6
1 4656 11/6/19 11/13/19 n y 3 5
1 4657 11/14/19 10/30/20 n n 4 4
1 4658 10/31/20 11/15/20 n n 5 3
1 4659 11/16/20 11/30/20 y n 6 2
1 4660 12/10/20 12/20/20 null y 7 1
我需要创建一个逻辑列来标识lead
='y'的结束日期,或采用下一个值结束日期,其中lead
='y'
超前/滞后=标识开始/结束日期是否有间隔
预期结果:
id prodid start end lead lag rnk_prod_first rnk_prod_last lead_end_dt
1 4654 2/26/19 4/5/19 y null 1 7 4/5/19
1 4655 5/20/19 8/1/19 y y 2 6 8/1/19
1 4656 11/6/19 11/13/19 n y 3 5 11/30/20
1 4657 11/14/19 10/30/20 n n 4 4 11/30/20
1 4658 10/31/20 11/15/20 n n 5 3 11/30/20
1 4659 11/20/20 11/30/20 y y 6 2 11/30/20
1 4660 12/10/20 12/20/20 null y 7 1 12/20/20
所以,如下所示
select case
when lead <> 'n' then end
--when lead <> 'y' then --take next value where lead = 'y'
--can we use lead and ignore the 'n'?
--can we use first_value somehow?
end lead_end_dt
我认为您可以使用累积的条件最大值-以相反的顺序:
select max(case when lead = 'y' then end end) over (partition by id order by order by prod_id desc)
如果这是您想要的唯一值,则可能有更简单的方法来获取它。如果是这样,请提出一个[[new问题,描述您的源数据,提供所需的结果,以及对逻辑的解释。