2017-01-14 3 views
0

Я спрашиваю, как найти значение, которое я хочу найти.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.

+0

Вы пробовали 'lead()'? – Serg

+0

Итак, вы ищете START_DATE последней строки с YN_DC = Y и END_DATE упорядочивается DESC? – Edward

ответ

0

Используйте функцию окна LEAD, чтобы получить значение следующей строки 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' 
+0

Благодарим за комментарий. Я попробую в следующий понедельник. – Christopher

+0

Ваш SQL на комментарий отлично работает. Я действительно задерживаю ваш комментарий, и я возьму, чтобы узнать о функции LEAD и OVER. благодаря – Christopher

 Смежные вопросы

  • Нет связанных вопросов^_^