WITH your_table AS (
SELECT 1 AS col1, 'Y' AS col2 FROM dual
union ALL
SELECT 2 AS col1, NULL AS col2 FROM dual
union ALL
SELECT 3 AS col1, NULL AS col2 FROM dual
union ALL
SELECT 4 AS col1, NULL AS col2 FROM dual
UNION ALL
SELECT 5 AS col1, 'Y' AS col2 FROM dual
union ALL
SELECT 6 AS col1, NULL AS col2 FROM dual
union ALL
SELECT 7 AS col1, NULL AS col2 FROM dual
union ALL
SELECT 8 AS col1, NULL AS col2 FROM dual
)
SELECT
col1,
col2,
CASE
WHEN col2 = 'Y' THEN col1
ELSE LAST_VALUE(CASE WHEN col2 = 'Y' THEN col1 END IGNORE NULLS)
OVER (ORDER BY col1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
END AS col3
FROM
your_table
ORDER BY
col1;
![1710145166758587.png image.png](/upload/wenda/20240311/1710145166758587.png)