आप CONNECT BY LEVEL
. का उपयोग करके एक पंक्ति जनरेटर स्टेटमेंट बना सकते हैं सिंटैक्स, क्रॉस आपकी तालिका में अलग-अलग उत्पादों के साथ जुड़ता है, और फिर बाहरी रूप से आपकी मूल्य तालिका में शामिल होता है। अंतिम स्पर्श LAST_VALUE
. का उपयोग करना है फ़ंक्शन और IGNORE NULLS
एक नया मान मिलने तक कीमत दोहराने के लिए, और चूंकि आप एक दृश्य चाहते थे, एक CREATE VIEW
के साथ कथन:
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;