Saya menemukan metode berikut lebih mudah:
Buat sampel data yang diberikan:
WITH example (date,close) AS
(VALUES
('12:00:00',3),
('12:00:01',4),
('12:00:02',5),
('12:00:03',NULL),
('12:00:04',NULL),
('12:00:05',3)
)
SELECT * INTO temporary table market_summary FROM example;
Query untuk mengisi nilai NULL dengan nilai yang diisi sebelumnya
select
date,
close,
first_value(close) over (partition by grp_close) as corrected_close
from (
select date, close,
sum(case when close is not null then 1 end) over (order by date) as grp_close
from market_summary
) t
Kembali
date | close | corrected_close
-----------------------------------
12:00:00 | 3 | 3
12:01:00 | 4 | 4
12:02:00 | 5 | 5
12:03:00 | NULL | 5
12:04:00 | NULL | 5
12:05:00 | 3 | 3
- tutup:nilai yang ada
- corrected_close:nilai terkoreksi