Oracle SQL поиск определенного значения столбца в наборе данных

Я спрашиваю, Как найти ценность того, что я хочу найти.

У меня набор данных выглядит как ниже

(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 » снова.

Как найти значение B С помощью SQL?

Если я использую C или Java, я могу найти значение как с помощью рекурсивной функции или что-то еще, но я понятия не имею, когда я пытаюсь найти это в использовании SQL.

1 ответ

  1. Используйте функцию LEADwindow для получения значения следующей строки YN_DC на основе порядка возрастания start_date. Проверьте, является ли значение 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'