Input
表A
ID YEAR
101 2012
101 2013
101 2014
102 2012
102 2013
102 2014
塔贝莱·
ID YEAR AMOUNT
101 2011 2384
101 2012 2987
101 2013 3232
101 2014 3987
102 2011 2212
102 2012 2332
102 2013 2987
102 2014 3222
输出表
ID YEAR AMOUNT PREV YEAR AMOUNT
101 2012 2987 2384
101 2013 3232 2987
101 2014 3987 3232
102 2012 2332 2212
102 2013 2987 2332
102 2014 3222 2987
问题描述:表A将选择年份作为基准,表B将具有所有记录,但我需要连接表A和表B以连接上一年的数据,请参阅输出表。我已经尝试过自我加入,但无法获得它。
我认为这是两个连接:
select a.*, b.amount, bprev.amount
from a left join
b
on b.id = a.id and b.year = a.year left join
b bprev
on bprev.id = a.id and bprev.year = a.year - 1;
这是一个数据库<>小提琴。
如果您的所有ID
都有所有年份的数据,则可以只使用窗口函数。这应该比自联接更有效,因为它只扫描tableb
一次:
select b.*
from tablea a
inner join (
select b.*, lag(amount) over(partition by id order by year) prev_year_amount
from tableb b
) a on a.id = b.id and a.year = b.year