Получить все записи, соответствующие условию Oracle SQL - PullRequest
1 голос
/ 17 марта 2020

У меня есть приведенная ниже структура таблицы, и я хочу получить все записи после строки, соответствующей заданному условию

FltNbr   Date   Stat_Ind
=======  =====  =========
1         15-MAR  0
2         16-MAR  1
3         17-MAR  0
4         18-MAR  1
5         19-MAR  0
6         19-MAR  0

Я хочу получить все записи после строки, у которой Stat_ind = 1, в этом в случае, если FltNbr 4 имеет последнее вхождение 1 и хочет получить все записи после FltNbr

Таким образом, результат должен быть -

FltNbr   Date   Stat_Ind
=======  =====  =========
5         19-MAR  0
6         19-MAR  0

Пожалуйста, помогите с SQL

1 Ответ

0 голосов
/ 17 марта 2020

Неясно, под «предыдущим» вы подразумеваете date, fltnbr или оба. Далее предполагается, что вы имеете в виду fltnbr.

Использовать lag():

select t.*
from (select t.*,
             lag(stat_ind) over (order by fltnbr) as prev_stat_ind
      from t
     ) t
where prev_stat_ind = 1;

РЕДАКТИРОВАТЬ:

Если вы хотите строки после последний «1», затем:

select t.*
from t
where t.fltnbr > all (select t2.fltnbr from t t2 where t2.stat_ind = 1);

Обратите внимание, что здесь используется > all. Это обрабатывает случай, когда нет строк с состоянием 1. Вы также можете использовать:

select t.*
from t
where t.fltnbr > (select coalesce(max(t2.fltnbr, t.fltnbr - 1)
                  from t t2
                  where t2.stat_ind = 1
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...