WITH
balance(userid, date, balance_amount) AS (
VALUES ('1112879', DATE '2022-08-05',700),
('1112879', DATE '2022-08-15',1500),
('1112879', DATE '2022-08-18',10100),
('1112879', DATE '2022-08-22',1700),
('1112879', DATE '2022-09-01',4200)
)
select
day::date,
FIRST_VALUE (balance_amount) over(PARTITION BY userid ORDER BY abs(day::date - balance.date::date) asc),
userid
from
generate_series('2022-08-01'::date, now()::date, '1 day'::interval) as day
left join balance on date = day
group by day, balance_amount,userid,balance.date::date
ORDER BY day;