Tôi thấy phương pháp sau dễ dàng hơn:
Tạo mẫu dữ liệu đã cho:
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;
Truy vấn điền giá trị NULL với giá trị đã điền trước đó
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
Trả lại
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
- đóng:giá trị hiện tại
- fixed_close:giá trị đã sửa