将表与当前年份联接并获取上一年的记录



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

最新更新