postgresql - 在 Postgresql 中创建最近 12 个月的表

标签 postgresql

我正在尝试创建一个看起来像这样的表(过去 12 个月的表)

month, year
10, 2016
9, 2016
8, 2016
7, 2016
6, 2016
5, 2016
4, 2016
3, 2016
2, 2016
1, 2016
12, 2015
11, 2015

我的代码看起来像这样:

select date_part('month', current_date) as order_month,
select date_part('year', current_date) as order_year
union all
select date_part('month', current_date - interval '1 month') as order_month,
select date_part('year', current_date - interval '1 month') as order_year
union all
...

有没有比使用 11 个并集更简洁的写法?

最佳答案

generate_series(start, stop, step) 将很有用,这样

SELECT
    EXTRACT('month' FROM d) AS month,
    EXTRACT('year' FROM d) AS year
FROM
    GENERATE_SERIES(
        now(),
        now() - interval '12 months',
        interval '-1 month'
    ) AS d
;

关于postgresql - 在 Postgresql 中创建最近 12 个月的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40345847/

相关文章:

用于更新复合键中的列的 SQL 查询

mysql - 如何为许多用户的网站生成唯一代码

sql - Rails 表查询的 "missing FROM-clause entry for table"错误

postgresql - 如何保存和恢复 ON_ERROR_STOP 的值?

sql - 在执行 Select 查询时,如何忽略 Postgresql 中列具有特定值的数据行?

postgresql - 连接期间出现 Postgres 和 c3p0 无效时区错误

java - 如何在 java/JDBC 中取消 postgres 查询

postgresql - 如何在 Postgresql 查询中使用多个 "unique index inferences"

postgresql - 将容器连接到本地数据库

python - 在 Django 中使用多个数据库,让另一个数据库包含不是由任何模型创建的表