PostgreSQL中的日期范围

时间:2010-12-20 06:42:54

标签: postgresql

当我将日期范围应用于我的查询时,是否仍然显示日期范围中使用的日期,即使这些日期没有数据?

假设我使用,

... where date between '1/12/2010' and '31/12/2010' order by date

我想要的结果是在当天的2010年1月12日之前显示所有金额列的总和,即使该日期没有数据,也是2010年12月31日的数据。

1 个答案:

答案 0 :(得分:26)

加入generate_series()填补空白。

示例:

CREATE TEMP TABLE foo AS SELECT CURRENT_DATE AS today;
SELECT
    COUNT(foo.*),
    generate_series::date
FROM
    foo
        RIGHT JOIN generate_series('2010-12-18', '2010-12-25', interval '1 day') ON generate_series = today
GROUP BY
    generate_series;

结果:

0,'2010-12-18'
0,'2010-12-19'
1,'2010-12-20'
0,'2010-12-21'
0,'2010-12-22'
0,'2010-12-23'
0,'2010-12-24'
0,'2010-12-25'