我有一个关系维护每月的历史数据.这些数据在每个月的最后一天添加到表中.然后可以调用我正在编写的服务,指定检索历史数据的前一个月和前几个月.我通过创建startDate和endDate变量,然后在这两个变量之间返回数据来实现这一点.我遇到的问题是,startDate是endDate之前的可变月数,我不知道如何在间隔中使用可变周期.

以下是我所拥有的:

    DECLARE
      endDate   TIMESTAMP := (DATE_TRUNC('MONTH',$2) + INTERVAL '1 MONTH') - INTERVAL '1 DAY';
      startDate TIMESTAMP := endDate - INTERVAL $3 'MONTH';

我知道startDate的行不正确.这是怎么做的?

推荐答案

用这句话:

startDate TIMESTAMP := endDate - ($3 || ' MONTH')::INTERVAL;

注意MONTH之前的空格.

Edit:我找到了另一个解决方案:你可以用interval来计算:

startDate TIMESTAMP := endDate - $3 * INTERVAL '1 MONTH';

对我来说这看起来好一点.

Postgresql相关问答推荐

我无法在过程中提交

用于JSON数组的带有组合条件的Postgres JSONB Select 查询

DBT-DBT依赖于未找到的源

右连接 postgresql 出现语法错误

我想优化查询SQL

如何获取在 Go 中完成的 SQL 插入的错误详细信息?

如何在postgres中查询多行

Power BI + Postgres:只读用户

是否可以短时间运行 VACUUM FULL 并获得一些好处?

postgres 如何计算多列哈希?

在 SQL 上返回负值

为什么 postgresql 可以在这个查询中高效地使用索引?

冲突中的 Postgres 会更新复合主键

如何判断每个组中是否存在值

如何增加 max_locks_per_transaction

PostgreSQL:将结果数据从 SQL 查询导出到 Excel/CSV

如何使用 Django Migrations 重新创建已删除的表?

Postgres 数据库文件保存在 ubuntu 中的什么位置?

错误:关系列不存在 PostgreSQL,无法运行插入查询

如何在 psql 中设置默认显示模式