необходимо повторить предыдущую транзакцию вместо нуля
Самый простой способ сделать это - взять исходный запрос и обернуть его в фильтрующий запрос:
select * from (
WITH dates
AS
(SELECT (dt + level - 1) AS etadate
FROM
(SELECT TRUNC(DATE '2018-09-01', 'MM') - 1 AS dt FROM DUAL
) d
CONNECT BY LEVEL <= sysdate - dt + 1
)
SELECT TO_CHAR(TO_DATE(d.etadate,'DD-MM-YYYY HH24:MI:SS'),'DD-MM-YY') AS DATEFORM,
COALESCE(nsp.YNAME, LAG(nsp.YNAME IGNORE NULLS) OVER (ORDER BY d.etadate)) AS YNAME,
COALESCE(nsp.CATEGORY, LAG(nsp.CATEGORY IGNORE NULLS) OVER (ORDER BY d.etadate)) AS CATEGORY,
COALESCE(nsp.TYPE, LAG(nsp.TYPE IGNORE NULLS) OVER (ORDER BY d.etadate)) AS TYPE,
COALESCE(nsp.STOCK_BALANCE, LAG(nsp.STOCK_BALANCE IGNORE NULLS) OVER (ORDER BY d.etadate)) AS STOCK_BALANCE
FROM dates d
LEFT JOIN VW_NET_STOCK_POSITION nsp
ON d.etadate = TRUNC(nsp.LAST_UPD_IS)
)
where etadate = trunc(sysdate)
/
Производительность этого может быть не очень хорошей в реальной жизни, в зависимости от того, сколько данных у вас в базовых таблицах.