Oracle SQL查找数据集

时间:2017-01-14 16:41:06

标签: sql oracle gaps-and-islands

我在问如何找到我想要找到的价值。

我的数据集如下所示

(D是最新的时间)

END_DATE | START_DATE | YN_DC
------------------------------
    D          C          Y
    C          B          Y
    B          A          N

在这种情况下,我想找到时间值“B”,这是YN_DC的值从“N”变为“Y”的开始时间

当YN_DC列更改为“Y”时,它将永远不会再次更改为“N”。

如何使用SQL找到值B?

如果我使用C或Java,我可能会发现该值是使用递归函数或其他东西,但我不知道何时尝试在使用SQL时找到它。

1 个答案:

答案 0 :(得分:0)

使用LEAD窗口函数根据start_date的升序获取YN_DC的下一行值。检查当前行的YN_DC值是N,下一行的值是Y

select end_date 
from (select d.*, lead(YN_DC) over(order by start_date) as next_yn_dc
      from dataset d
     ) x
where yn_dc='N' and next_yn_dc='Y'