Я могу предложить вам следующий подход.
with
date_t as
(
select 1 as item_number, to_date('01/01/2020','mm/dd/yyyy') as effective_date, 8.00 as cost, 11.00 as price from dual union all
select 1 as item_number, to_date('01/01/2020','mm/dd/yyyy') as effective_date, 8.00 as cost, 10.50 as price from dual union all
select 2 as item_number, to_date('09/22/2020','mm/dd/yyyy') as effective_date, 6.25 as cost, 6.50 as price from dual union all
select 1 as item_number, to_date('01/01/2020','mm/dd/yyyy') as effective_date, 8.00 as cost, 10.50 as price from dual union all
select 1 as item_number, to_date('05/07/2019','mm/dd/yyyy') as effective_date, 7.00 as cost, 10.50 as price from dual union all
select 1 as item_number, to_date('03/12/2018','mm/dd/yyyy') as effective_date, 6.00 as cost, 10.50 as price from dual union all
select 2 as item_number, to_date('03/12/2018','mm/dd/yyyy') as effective_date, 6.00 as cost, 6.50 as price from dual union all
select 2 as item_number, to_date('03/12/2018','mm/dd/yyyy') as effective_date, 6.00 as cost, 6.50 as price from dual union all
select 1 as item_number, to_date('01/01/2020','mm/dd/yyyy') as effective_date, 7.00 as cost, 10.50 as price from dual union all
select 1 as item_number, to_date('08/01/2016','mm/dd/yyyy') as effective_date, 5.25 as cost, 10.50 as price from dual
)
select
item_number,
lag(effective_date) over (partition by item_number order by effective_date) as previous_date,
lag(cost) over (partition by item_number order by effective_date) as previous_cost,
effective_date as current_date,
cost as current_cost
from
(
select
item_number,
effective_date,
max(cost) as cost
from
date_t
group by
item_number,
effective_date
order by effective_date desc
) t
Результат будет выглядеть так.
ITEM_NUMBER PREVIOUS_DATE PREVIOUS_COST CURRENT_DATE CURRENT_COST
----------- ------------- ------------- ------------ -----------
1 null null 01.08.2016 5.25
1 01.08.2016 5.25 12.03.2018 6
1 12.03.2018 6 07.05.2019 7
1 07.05.2019 7 01.01.2020 8
2 null null 12.03.2018 6
2 12.03.2018 6 22.09.2020 6.25
Примечание: У меня есть другой формат даты в Oracle: dd.mm.yyyy
.