Bạn có thể tạo câu lệnh tạo hàng bằng CONNECT BY LEVEL
cú pháp, kết hợp chéo với các sản phẩm riêng biệt trong bảng của bạn, sau đó kết hợp bên ngoài với các sản phẩm khác nhau trong bảng giá của bạn. Bước cuối cùng là sử dụng LAST_VALUE
chức năng và IGNORE NULLS
để lặp lại giá cho đến khi gặp giá trị mới và vì bạn muốn có một chế độ xem, với CREATE VIEW
tuyên bố:
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;