Возможно, вам лучше использовать конвейерную табличную функцию, а не представление. В частности, если таблицы, лежащие в основе представления, являются относительно сложными, возможность явно писать код для включения параметров в запрос вместо надежды на то, что оптимизатор может выдвинуть предикат, где это необходимо, может быть очень полезной с точки зрения производительности.
Пример таблицы с данными до и после искомого окна
create table t (
col1 integer,
date_dt date
);
insert into t values( 1, date '2019-04-01' );
insert into t values( 2, date '2019-04-10' );
insert into t values( 3, date '2019-04-20' );
insert into t values( 4, date '2019-04-27' );
insert into t values( 5, date '2019-04-28' );
insert into t values( 6, date '2019-04-29' );
insert into t values( 7, date '2019-04-30' );
insert into t values( 8, date '2019-05-01' );
insert into t values( 9, date '2019-05-02' );
Вам понадобится тип объекта, коллекция и табличная функция.
create type t_obj as object (
col1 integer,
date_dt date
);
/
create type tbl_obj as table of t_obj;
/
create or replace function last_5_days( p_date_dt in date )
return tbl_obj
pipelined
is
begin
for i in (select * from t where date_dt between p_date_dt - 4 and p_date_dt )
loop
pipe row( t_obj( i.col1, i.date_dt ) );
end loop;
return;
end;
/
Теперь вы можете запросить табличную функцию, передать дату и получить 5 строк назад (27 апреля - 1 мая)
select *
from last_5_days( date '2019-05-01' );
Пример выполнения этого на liveSQL