The correct answer would be to put a case statement inside the first_value, like this:
select id, date, value, first_value(case where value is not null then value end) ignore nulls over (order by date desc) as value2 from table