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

ycl3bljg  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(412)

输入

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

问题描述:tablea将选择年份作为基础,tableb将拥有所有记录,但我需要连接tablea和tableb以连接上一年的数据,请参见输出表。我尝试过使用self-join,但没有成功。

jobtbby3

jobtbby31#

我认为这是两个连接:

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;

这是一把小提琴。

gab6jxml

gab6jxml2#

如果你们都 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

相关问题