Вы можете использовать lag()
:
select t.id,
coalesce(nullif(date, '01-01-1900'),
lag(date) over (order by id)
) as date
from t;
РЕДАКТИРОВАТЬ:
Если вы хотите обновить значение, используйте обновляемый CTE:
with toupdate as (
select t.*, lag(date) over (order by id) as prev_date
from t
)
update toupdate
set date = prev_date
where date = '1900-01-01';