2017-09-15 49 views
0

我想创建一个连接,将上一年的记录连接到当年的同一时间段。所有数据都在同一个表中。加入同一个表以匹配去年的记录

输入表:

A | B | C | D 
a 2017 1 10 
a 2017 2 20 
a 2017 3  5 
a 2016 1 100 
a 2016 2 50 
a 2016 3 1 

输出表:

A | B | C | D | E 
a 2017 1 10 100 
a 2017 2 20 50 
a 2017 3  5 1 
a 2016 1 100 NULL 
a 2016 2 50 NULL 
a 2016 3 1  NULL 
+0

做一个自己的左加入! – jarlh

+0

@jarlh什么?我希望今年能与前一年一起加入。所以当我在b = b-1上使用左连接输出表时,它不起作用 – qwerty

回答

2

有这样做的几种方法。一个是left join

select t.*, tprev.d as e 
from t left join 
    t tprev 
    on t.a = tprev.a and t.c = tprev.c and tprev.b = t.b - 1; 

另一种方法是使用窗口功能:

select t.*, lag(t.d) over (partition by t.a, t.c order by b) as e 
from t; 

您的数据在同这些工作。但他们有微妙的不同。第一个具体看一年前的数据。第二个观察数据之前的最近一年。

相关问题