我有一个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”语句。
非常感谢,如果问题太简单,我很抱歉!
答案 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)
上的索引。注意:还有其他类似的方法来表达相同的逻辑。