By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE item_value ( P_Date, ITEM, Value ) AS
SELECT DATE '2020-12-20', 'AA1', 9 FROM DUAL UNION ALL
SELECT DATE '2021-01-01', 'AA1', 10 FROM DUAL UNION ALL
SELECT DATE '2021-01-01', 'AA2', 100 FROM DUAL;
3 rows affected
WITH date_dim ( full_date ) AS (
SELECT DATE '2020-12-31' + LEVEL - 1 AS full_Date
FROM DUAL
CONNECT BY DATE '2020-12-31' + LEVEL - 1 <= DATE '2021-01-04'
)
SELECT item,
full_date,
MAX( value ) KEEP ( DENSE_RANK LAST ORDER BY p_date ) AS value
FROM date_dim d
LEFT OUTER JOIN item_value i
PARTITION BY ( i.item )
ON ( d.full_date >= i.p_date )
GROUP BY item, full_date
ITEM | FULL_DATE | VALUE |
---|---|---|
AA1 | 31-DEC-20 | 9 |
AA1 | 01-JAN-21 | 10 |
AA1 | 02-JAN-21 | 10 |
AA1 | 03-JAN-21 | 10 |
AA1 | 04-JAN-21 | 10 |
AA2 | 31-DEC-20 | null |
AA2 | 01-JAN-21 | 100 |
AA2 | 02-JAN-21 | 100 |
AA2 | 03-JAN-21 | 100 |
AA2 | 04-JAN-21 | 100 |