sql server中的上一年记录

sql server中的上一年记录,sql,sql-server,tsql,sql-server-2016,window-functions,Sql,Sql Server,Tsql,Sql Server 2016,Window Functions,如何获取当前行中的上一年值 范例 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

如何获取当前行中的上一年值

范例

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
窗口功能滞后完全符合您的要求:

select t.*, lag(amount) over(order by year) prev_amount
from mytable t
我想你只是想:

请注意,您要求的是上一年的数据,而不是上一年的数据。在我看来,2003年应该为空,因为数据中没有2002年

如果这是您真正想要的,那么自联接就很容易:

select t.*, tprev.amount as prev_year_amount
from t left join
     t tprev
     on tprev.year = t.year - 1

感谢您的及时回复,但是滞后函数需要很长时间,因为我需要将其旋转超过100万次records@sql2020:对于此任务,到目前为止,滞后是最有效的解决方案。其他选项将需要自加入表,这将更加昂贵。
select t.*, tprev.amount as prev_year_amount
from t left join
     t tprev
     on tprev.year = t.year - 1