查找缺少的日期(PostgreSQL)

时间:2015-02-18 12:10:53

标签: postgresql

我有一个包含d_date列的表。在此列中,仅包含日期值。

我的问题是"我想在此栏中找到错过的日期(d_date)"。

例如: 此列包含来自" 1-Jan-2007"的日期。到" 2007年1月7日" 那么我想在" 1-Jan-2007"之间找到错过的日期。至" 2007年1月10日" 我的结果应该是" 2007年1月8日"," 2007年1月9日"," 2007年1月10日"。

那么,我怎样才能得到这个结果呢?

2 个答案:

答案 0 :(得分:9)

您可以将使用函数generate_series(start, stop, step interval)创建的日期系列与表格中的日期进行比较:

SELECT * FROM generate_series('2007-01-01', '2007-01-10', interval '1 day') AS dates
  WHERE dates NOT IN (SELECT d_date FROM your_table);

PostgreSQL文档中有关函数generate_series的更多信息:9.24. Set Returning Functions

答案 1 :(得分:0)

您可以使用WITH RECURSIVE构建日期表,然后选择表格中没有的日期:

WITH RECURSIVE t(d) AS (
  (SELECT '2015-01-01'::date)
UNION ALL
  (SELECT d + 1 FROM t WHERE d + 1 <= '2015-01-10')
) SELECT d FROM t WHERE d NOT IN (SELECT d_date FROM tbl);

编辑:请注意,递归CTE在这里可能有点过分。 Epikuros's answergenerate_series提供了一个更简单的解决方案。