Операция ранжирования по сегментам SQL - PullRequest
0 голосов
/ 08 мая 2019

Я хочу найти строки, которые идут сразу после (последней) строки, где Text = E.

Это похоже на журнал транзакций, в котором я хочу найти то, что произошло именно после того, как Text был равенE. Столбец «Дата» может сбивать с толку, соблюдайте только столбец RANK.

Пример: я хочу получить строки 6 (или 6 и 7) и 14 (или 14 и 15) из таблицы ниже:

Очень ценится.

table

1 Ответ

0 голосов
/ 08 мая 2019

Коррелированный подзапрос - это простое решение:

select t.*
from t
where t.date > (select max(t2.date) from t t2 where t2.id = t.id and t2.text = 'E');

Если вы хотите использовать оконные функции:

select t.*
from (select t.*, max(case when text = 'E' then date end) as e_date
      from t
     ) t
where date > e_date;
...