加入同一张表来匹配去年的记录

时间:2017-09-15 12:21:53

标签: sql sql-server join

我想创建一个连接,将去年的记录连接到当年的同一时期。所有数据都在同一个表中。

输入表:

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

1 个答案:

答案 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;

这些对您的数据起着同样的作用。但它们略有不同。第一个特别关注一年前的数据。第二部分是关于有数据的最近一年。