如何获取缺口日期列表

时间:2015-08-09 07:47:04

标签: mysql sql datetime

我有一个db表,用一天存储值(在datetime中)。现在我想找到那些表格中没有条目存在的日子。

示例:

2011-11-15 00:00:00 | 10.00
2011-11-17 00:00:00 | 20.00
2011-11-18 00:00:00 | 30.00

2011-11-16 00:00:00缺失,因此该日期应该是从SELECT语句返回的日期。

我试过

WITH days(d) AS (
SELECT i::timestamp(0) 
FROM generate_series('2011-11-16 00:00:00', '2015-08-09 13:00:00', interval '1 day') d(i)
)
SELECT d FROM 
days
LEFT JOIN tgeg_maand ON d = Datum_Maand
WHERE tgeg_maand IS NULL;

但MySQL似乎不理解“WITH”语句。

非常感谢,如果问题太简单,我很抱歉!

1 个答案:

答案 0 :(得分:1)

您的问题标记为MySQL,但您的语法是Postgres。在MySQL(或任何其他数据库)中执行所需操作的一种方法是使用not exists

select m.*
from tgeg_maand m
where not exists (select 1
                  from tgeg_maand m2
                  where m.Datum_Maand = date_add(m2.Datum_Maand, interval 1 day)
                 ) and
      exists (select 1
              from tgeg_maand m2
              where m2.Datum_Maand < m.Datum_Maand
             );

第一个条件(not exists)表示前一天没有记录。第二个条件只是过滤掉第一个记录。为了提高性能,您需要tgeg_maand(Datum_Maand)上的索引。注意:还有其他类似的方法来表达相同的逻辑。