Я думаю, вы просто хотите lag()
:
select t.*, lag(amount) over (order by year) as prev_year_amount
from t;
Обратите внимание, что вы запрашиваете за предыдущий год с данными , в отличие от предыдущего года. На мой взгляд, у вас должно быть NULL
на 2003 год, потому что в данных нет 2002.
Если вы действительно этого хотите, самостоятельное объединение достаточно просто:
select t.*, tprev.amount as prev_year_amount
from t left join
t tprev
on tprev.year = t.year - 1