我在Postgres(9.2)中有一张表,看起来像这样:
id | code | year
1 | A | 2014
1 | A | 2015
1 | A | 2016
2 | A | 2014
2 | A | 2015
2 | B | 2016
我正在尝试根据id
字段合并行。我可以使用自联接来做到这一点,但是我试图避免尽可能两次扫描表(可能要扫描几百万行)。我想做这样的事情:
SELECT CASE year WHEN 2016 THEN code ELSE '' END AS code,
CASE year WHEN 2015 THEN code ELSE '' END AS prev_code
FROM tbl
GROUP BY id
HAVING year = 2015 OR year = 2016
理想情况下,输出应如下所示:
code | prev_code
A | A (from id=1)
B | A (from id=2)
当我运行我提出的查询时,它告诉我year
需要在group by或聚合函数中。互联网上有类似这样的查询示例,但它们似乎不适用于Postgres。任何想法如何在Postgres 9.2中做到这一点?
您可以为此使用滞后窗口功能:
Select Z.Code, Z.PrevCode
From (
Select Id, Code, Year
, lag( Code, 1 ) Over ( Partition By Id Order By Year ) As PrevCode
From tbl
Where Year In(2016,2015)
) As Z
Where Z.Year = 2016
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句