2017-09-15 55 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; 

您的數據在同這些工作。但他們有微妙的不同。第一個具體看一年前的數據。第二個觀察數據之前的最近一年。

相關問題