generate_series-function中的子查询?

时间:2019-11-10 20:01:46

标签: postgresql

长话短说;我需要生成两个给定日期之间的所有日期。我的第一个直觉就是generate_series函数,所以类似

\set start_date '''2019-10-01'''
\set end_date '''2019-11-07'''

SELECT current_date+AllDates.days
FROM generate_series(DATE :start_date-current_date,
DATE :end_date-current_date) AS AllDates(days);

基本上是psql 9.5文档中的一些改编代码。这可行,但是我想从简单的查询中获取start_dateend_date

SELECT min(checkout_date)
FROM table;

SELECT max(checkout_date)
FROM table;

我该如何实现?有没有更好的整体方法?我确实意识到这两个小查询的主要问题是它们生成的表本身具有值而不是日期值,但是由于我对SQL还是很陌生,所以我很难理解一个人如何处理这些情况

1 个答案:

答案 0 :(得分:1)

with my_table(checkout_date) as (
values 
    ('2019-01-01'::date),
    ('2019-01-03'::date)    
)

select generate_series(min(checkout_date), max(checkout_date), interval '1 day')
from my_table;

    generate_series     
------------------------
 2019-01-01 00:00:00+01
 2019-01-02 00:00:00+01
 2019-01-03 00:00:00+01
(3 rows)

请注意,您需要第三个interval参数。了解有关设置返回函数in the documentation.

的信息