出于隐私原因,我无法发布整个查询,但我们的查询看起来像这样
> 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。
有没有办法自动化它而不必在当时运行查询一个日期?
答案 0 :(得分:0)
使用generate_series(startdate, enddate, interval)
SELECT generate_series(DATE '2017-06-25', DATE '2017-08-01', INTERVAL '1' DAY)
或者,如果它是一组不相关的日期,请使用值表达式
WITH datee as (VALUES ('2017-06-25'), ('2017-08-14'))
SELECT
或(更容易从某些工具或语言生成)将数组传递给unfst:
WITH datee(datee) as (SELECT unnest($1))
其中$1
类型为date[]
由于deficiency in PostgreSQL's CTE support,您最好将输入用作FROM
中的条款,而不是CTE(WITH
查询)。所以
SELECT ...
FROM (
SELECT unnest($1)
) AS datee(datee)
除了在这种情况下,您可以进一步简化LATERAL
加入
SELECT ..
FROM (super long query) ...
LATERAL unnest($1) AS dateee(datee)
可能表现最佳。