Запись предыдущего года на сервере sql - PullRequest
0 голосов
/ 03 апреля 2020

Как получить значения предыдущего года в текущей строке.

пример

id      year    amount
1001    2001    2400
1002    2003    3600
1003    2005    2300
1002    2004    1600

Желаемый результат

id      year    amount  prevyearAmount
1001    2001    2400    Null
1002    2003    3600    2400
1003    2005    2300    1600
1002    2004    1600    3600

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Я думаю, вы просто хотите 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
1 голос
/ 03 апреля 2020

Оконная функция lag() делает именно то, что вы просите:

select t.*, lag(amount) over(order by year) prev_amount
from mytable t
...