Есть ли способ получить доступ к предыдущему конкретному значению в SQL?

Я работаю в Oracle live SQL с этой же таблицей с данными за весь год (в котором интервалы могут быть больше).

Это всего лишь пример (часть всей таблицы):

Пример таблицы

Мне нужно добавить два столбца, которые будут показывать интервал, в котором находятся даты (на основе min, between и max).

Столбец От: если дата помечена как минимальная или обе в столбце Oddo, она должна просто отображать эту дату, если она помечена как «между» или «max», она должна показывать предыдущую минимальную дату.

Столбец «До»: если дата помечена как максимальная или обе в столбце Oddo, она должна просто отображать эту дату, если она помечена как «между» или «мин», она должна показывать следующую максимальную дату. Конечный результат должен выглядеть так:

Окончательный результат

Большое спасибо за любые предложения.


person Jakub Vlček    schedule 30.01.2021    source источник


Ответы (1)


В Oracle одним из методов является условное кумулятивное агрегирование:

select t.*,
       max(case when odd = 'min' then date end) over (order by date) as min_date,
       min(case when odd = 'max' then date end) over (order by date desc) as max_date
from t;
person Gordon Linoff    schedule 30.01.2021
comment
Ого, да, это сработало. Мне просто нужно было добавить ORDER BY date DESC и два предложения ELSE. Большое спасибо - person Jakub Vlček; 30.01.2021
comment
@ JakubVlček. . . Пункты else не нужны. - person Gordon Linoff; 30.01.2021
comment
Мне пришлось принять во внимание "оба" значения, поэтому мне пришлось добавить ИНАЧЕ СЛУЧАЙ, КОГДА oddo = 'both' ТОГДА дата - person Jakub Vlček; 31.01.2021