试图在psql中构造一个select语句,其中包含的年份列表是“今年”之前的(x)年。
对SQL to return list of years since a specific year中提供的答案的修改适用于sql,但不适用于postgres。
尝试过修改generate_series,但未成功。
答案 0 :(得分:0)
使用-1步骤。示例x = 15
select *
from
generate_series(
extract(year from current_date)::int,
extract(year from current_date)::int - 15,
-1
)
另一种方法:
select
extract(year from x.y)
from
generate_series(
current_timestamp,
current_timestamp - interval '1 year' * 15,
interval '-1 year'
) as x(y)
答案 1 :(得分:0)
简短一点:您还可以使用generate_series
函数的数字变量并直接转换EXTRACT
函数的返回值,例如:
.limitToFirst(1)
答案 2 :(得分:0)
如果碰巧以“年”作为日期,则可以执行以下操作:
select *
from generate_series(date_trunc('year', now()) - interval '15 year',
date_trunc('year', now()),
interval '1 year'
)
(这是我通常想要的年份列表。)
更重要的是,您可以轻松地使SQL Server代码适应Postgres:
with recursive yearlist as (
select extract(year from now()) as year, 1 as lev
union all
select yl.year - 1 as year, lev + 1
from yearlist yl
where lev < 15
)
select year
from yearlist
order by year desc;
我建议改用generate_series()
,但我想证明Postgres也支持递归CTE。