我想创建一个连接,将去年的记录连接到当年的同一时期。所有数据都在同一个表中。
输入表:
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 :(得分: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;
这些对您的数据起着同样的作用。但它们略有不同。第一个特别关注一年前的数据。第二部分是关于有数据的最近一年。