是否可以在 postgres 中传递 WITH 子句别名作为函数参数?



我想重构我的查询以使用子查询作为函数参数。

原始查询如下所示,工作正常:

SELECT date_trunc('hour', (SELECT timestamp FROM data ORDER BY timestamp DESC LIMIT 1));

我想知道是否可以重构查询以将别名值作为参数传递,而不是上面显示的SELECT语句。

我试图想出这样的东西,但没有运气:

WITH ts_query AS (
SELECT "timestamp" FROM "data" ORDER BY "timestamp" DESC LIMIT 1
) 
SELECT date_trunc('hour', ts_query);

当我收到以下错误时:

ERROR: column "ts_query" does not exist

这是你想要的吗?

WITH ts_query AS (
SELECT "timestamp"
FROM "data"
ORDER BY "timestamp" DESC
LIMIT 1
)
SELECT date_trunc('hour', "timestamp")
FROM ts_query;

换句话说,ts_query替换后续查询中的而不是

在更复杂的查询中,可以使用:

SELECT date_trunc('hour', t1."timestamp")
FROM ts_query tq CROSS JOIN
. . .   -- more query logic here

我在要参数化的查询中执行此操作,具有包含查询其余部分中使用的参数的 CTE(称为params(。

如果您知道CTE 只有一行,则可以将其用作标量子查询:

SELECT date_trunc('hour', (SELECT "timestamp" FROM ts_query) )

如果 CTE 具有多行,则会生成运行时错误。

最新更新