我正在使用Postgres v> 9。
我想获取这样的表的值:
id year value
1 2015 0.1
2 2015 0.2
6 2030 0.3
6 2015 0.4
6 2017 0.3
这个想法是获得年数<2019或year = 2030的行。如果重复id,我只想获得2030行,而不是2015年,也就是说,我要寻找的结果是:
id year value
1 2015 0.1
2 2015 0.2
6 2030 0.3
我该怎么做?
答案 0 :(得分:0)
如果您希望每个ID一行,请使用%d
:
distinct on
答案 1 :(得分:0)
SELECT ID,
FIRST_VALUE(YEAR) OVER (PARTITION BY ID ORDER BY YEAR DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS year,
FIRST_VALUE(Value) OVER (PARTITION BY ID ORDER BY YEAR DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS value
FROM t
WHERE YEAR = 2030 OR YEAR < 2019
我认为这是first_value的标准-postgre可能需要单独的子句吗?
答案 2 :(得分:0)
这仅考虑2030年或<2019年的任何一年。至少这就是问题所在。 (我怀疑那里有些模糊。)
它从id
中选择一行,并以最近的年份为准。
SELECT DISTINCT ON (id) *
FROM tbl
ORDER BY id, year DESC
WHERE (year = 2030 OR year < 2019);
如果可以有多行具有相同的(id, year)
,则需要一个决胜局。
关于此以及DISTINCT ON
的更多详细信息: