2017-09-15 8 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

自分で行うLEFT JOIN! – jarlh

+0

@jarlhは何ですか?私は今年が前年に加わることを望む。だから、私はb = b-1上で左結合出力テーブルを使用すると、それは動作しません – qwerty

答えて

2

はこれを行うにはいくつかの方法があります。一つはleft joinです:

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

あなたのデータに同じでこれらの作業:

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; 

もう一つの方法は、ウィンドウ関数を使用することです。しかし、それは微妙に異なります。最初の人は1年前のデータを見ています。 2番目はデータがある前の直近の年を調べます。

関連する問題