过滤数据后的潜在价值

问题描述 投票:0回答:1

下面是我创建的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
sql oracle case lag lead
1个回答
0
投票

我认为您可以使用累积的条件最大值-以相反的顺序:

select max(case when lead = 'y' then end end) over (partition by id order by order by prod_id desc)

如果这是您想要的唯一值,则可能有更简单的方法来获取它。如果是这样,请提出一个[[new问题,描述您的源数据,提供所需的结果,以及对逻辑的解释。

© www.soinside.com 2019 - 2024. All rights reserved.