Sql 如何迭代不同的WITH语句

Sql 如何迭代不同的WITH语句,sql,postgresql,Sql,Postgresql,出于隐私的原因,我不能发布整个查询,但我们有一个如下的查询 > WITH datee as (SELECT '2017-06-25 00:00:00-00'::DATE as dateee) SELECT > tab1.a FROM (super long query here that references dateee a lot) as tab1 我需要这个来迭代一系列日期,比如从2017-03-25 00:00:00-00到2017-06-25 00:00:00-00 有

出于隐私的原因,我不能发布整个查询,但我们有一个如下的查询

> WITH datee as (SELECT '2017-06-25 00:00:00-00'::DATE as dateee) SELECT
> tab1.a  FROM (super long query here that references dateee a lot) as tab1
我需要这个来迭代一系列日期,比如从2017-03-25 00:00:00-00到2017-06-25 00:00:00-00

有没有一种方法可以在不必每次运行一个日期的情况下自动执行查询?

使用
生成序列(开始日期、结束日期、间隔)

或者,如果是一组不相关的日期,则使用值表达式

WITH datee as (VALUES ('2017-06-25'), ('2017-08-14')) 
SELECT
或者(更容易从某些工具或语言生成)将数组传递给unnest:

WITH datee(datee) as (SELECT unnest($1))
其中
$1
类型为
date[]


您最好将输入用作
FROM
中的子句,而不是CTE(
,带有
查询),因为存在错误。所以

除此之外,在这种情况下,您可以通过
横向
连接来进一步简化

SELECT ..
FROM (super long query) ...
     LATERAL unnest($1) AS dateee(datee)
哪一个可能表现最好。

使用
生成序列(开始日期、结束日期、间隔)

或者,如果是一组不相关的日期,则使用值表达式

WITH datee as (VALUES ('2017-06-25'), ('2017-08-14')) 
SELECT
或者(更容易从某些工具或语言生成)将数组传递给unnest:

WITH datee(datee) as (SELECT unnest($1))
其中
$1
类型为
date[]


您最好将输入用作
FROM
中的子句,而不是CTE(
,带有
查询),因为存在错误。所以

除此之外,在这种情况下,您可以通过
横向
连接来进一步简化

SELECT ..
FROM (super long query) ...
     LATERAL unnest($1) AS dateee(datee)

哪一个可能表现最好。

您可以扩展CTE以包含更多的日期(使用
UNION ALL
),也可以。使用
VALUES
子句比使用
UNION ALL
更好。您可以扩展CTE以包含更多的日期(使用
UNION ALL
)或者你也可以。使用
VALUES
子句比使用
UNION-ALL