add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
CREATE TABLE table_name (NAME_, DATE_, PARAM_, VALUE) AS
SELECT 'A', DATE '2023-09-26', 'ABOV', NULL FROM DUAL UNION ALL
SELECT 'A', DATE '2023-09-26', 'NEXT', 11 FROM DUAL UNION ALL
SELECT 'A', DATE '2023-09-27', 'NEXT', 10 FROM DUAL UNION ALL
SELECT 'A', DATE '2023-09-28', 'NEXT', 12 FROM DUAL UNION ALL

SELECT 'B', DATE '2023-09-25', 'NEXT', 2 FROM DUAL UNION ALL
SELECT 'B', DATE '2023-09-28', 'ABOV', NULL FROM DUAL UNION ALL
SELECT 'B', DATE '2023-09-28', 'NEXT', 4 FROM DUAL;
7 rows affected
CREATE TABLE table_name2 (NAME_, DATE_, PARAM_, VALUE) AS
SELECT 'A', DATE '2023-09-26', 'ABOV', 0 FROM DUAL UNION ALL
SELECT 'A', DATE '2023-09-26', 'NEXT', 11 FROM DUAL UNION ALL
SELECT 'A', DATE '2023-09-27', 'ABOV', 0 FROM DUAL UNION ALL
SELECT 'A', DATE '2023-09-27', 'NEXT', 10 FROM DUAL UNION ALL
SELECT 'A', DATE '2023-09-28', 'ABOV', 0 FROM DUAL UNION ALL
SELECT 'A', DATE '2023-09-28', 'NEXT', 12 FROM DUAL UNION ALL
SELECT 'A', DATE '2023-09-29', 'ABOV', 0 FROM DUAL UNION ALL
SELECT 'A', DATE '2023-09-29', 'NEXT', 0 FROM DUAL UNION ALL

SELECT 'B', DATE '2023-09-25', 'ABOV', NULL FROM DUAL UNION ALL
SELECT 'B', DATE '2023-09-25', 'NEXT', 2 FROM DUAL UNION ALL
SELECT 'B', DATE '2023-09-26', 'ABOV', NULL FROM DUAL UNION ALL
SELECT 'B', DATE '2023-09-26', 'NEXT', NULL FROM DUAL UNION ALL
SELECT 'B', DATE '2023-09-27', 'ABOV', NULL FROM DUAL UNION ALL
SELECT 'B', DATE '2023-09-27', 'NEXT', NULL FROM DUAL UNION ALL
SELECT 'B', DATE '2023-09-28', 'ABOV', 0 FROM DUAL UNION ALL
SELECT 'B', DATE '2023-09-28', 'NEXT', 4 FROM DUAL UNION ALL
SELECT 'B', DATE '2023-09-29', 'ABOV', 0 FROM DUAL UNION ALL
SELECT 'B', DATE '2023-09-29', 'NEXT', 0 FROM DUAL;
18 rows affected
-- INPUT
SELECT * FROM table_name
NAME_ DATE_ PARAM_ VALUE
A 2023-09-26 00:00:00 ABOV null
A 2023-09-26 00:00:00 NEXT 11
A 2023-09-27 00:00:00 NEXT 10
A 2023-09-28 00:00:00 NEXT 12
B 2023-09-25 00:00:00 NEXT 2
B 2023-09-28 00:00:00 ABOV null
B 2023-09-28 00:00:00 NEXT 4
-- OUTPUT
SELECT * FROM table_name2
NAME_ DATE_ PARAM_ VALUE
A 2023-09-26 00:00:00 ABOV 0
A 2023-09-26 00:00:00 NEXT 11
A 2023-09-27 00:00:00 ABOV 0
A 2023-09-27 00:00:00 NEXT 10
A 2023-09-28 00:00:00 ABOV 0
A 2023-09-28 00:00:00 NEXT 12
A 2023-09-29 00:00:00 ABOV 0
A 2023-09-29 00:00:00 NEXT 0
B 2023-09-25 00:00:00 ABOV null
B 2023-09-25 00:00:00 NEXT 2
B 2023-09-26 00:00:00 ABOV null
B 2023-09-26 00:00:00 NEXT null
B 2023-09-27 00:00:00 ABOV null
B 2023-09-27 00:00:00 NEXT null
B 2023-09-28 00:00:00 ABOV 0
B 2023-09-28 00:00:00 NEXT 4
B 2023-09-29 00:00:00 ABOV 0
B 2023-09-29 00:00:00 NEXT 0
SELECT
t.NAME_,
t.DATE_,
t.PARAM_,
LAST_VALUE(VALUE_) IGNORE NULLS OVER (
PARTITION BY t.NAME_, t.PARAM_ ORDER BY d.DATE_) AS VALUE_

FROM
(SELECT DISTINCT DATE_ FROM table_name) d
LEFT OUTER JOIN
(SELECT NAME_, DATE_, PARAM_, COALESCE(VALUE, 0) as VALUE_
FROM table_name
WHERE PARAM_ in ('ABOV', 'NEXT')) t

PARTITION BY
(NAME_, PARAM_) ON (t.DATE_ = d.DATE_)

ORDER BY
NAME_, PARAM_, DATE_
NAME_ DATE_ PARAM_ VALUE_
A 2023-09-26 00:00:00 ABOV 0
A null ABOV null
A null ABOV 0
A null ABOV 0
A 2023-09-26 00:00:00 NEXT 11
A 2023-09-27 00:00:00 NEXT 10
A 2023-09-28 00:00:00 NEXT 12
A null NEXT null
B 2023-09-28 00:00:00 ABOV 0
B null ABOV null
B null ABOV null
B null ABOV null
B 2023-09-25 00:00:00 NEXT 2
B 2023-09-28 00:00:00 NEXT 4
B null NEXT 2
B null NEXT 2