Sie können eine Zeilengenerator-Anweisung mit CONNECT BY LEVEL
erstellen Syntax, Cross Join mit den verschiedenen Produkten in Ihrer Tabelle und dann Outer Join mit Ihrer Preistabelle. Der letzte Schliff ist die Verwendung des LAST_VALUE
Funktion und IGNORE NULLS
um den Preis zu wiederholen, bis ein neuer Wert gefunden wird, und da Sie eine Ansicht wollten, mit einem CREATE VIEW
Anweisung:
create view dense_prices_test as
select
dp.price_date
, dp.product
, last_value(pt.price ignore nulls) over (order by dp.product, dp.price_date) price
from (
-- Cross join with the distinct product set in prices_test
select d.price_date, p.product
from (
-- Row generator to list all dates from first date in prices_test to today
with dates as (select min(price_date) beg_date, sysdate end_date from prices_test)
select dates.beg_date + level - 1 price_date
from dual
cross join dates
connect by level <= dates.end_date - dates.beg_date + 1
) d
cross join (select distinct product from prices_test) p
) dp
left outer join prices_test pt on pt.price_date = dp.price_date and pt.product = dp.product;