因此,可以说我有一些类似的记录:
2011-01-01 Cat 2011-01-02 Dog 2011-01-04 Horse 2011-01-06 Lion
我该如何构造一个查询,该查询将返回2011-01-03和2011-01-05,即未使用的日期。我将博客发布到未来,我想要一个查询来向我显示我还没有发布任何东西的日子。从当前日期到未来的2周。
更新:
我对建立一个永久性的日期表并不感到兴奋。经过考虑之后,解决方案似乎是制作一个小的存储过程来创建一个临时表。就像是:
CREATE PROCEDURE MISSING_DATES() BEGIN CREATE TABLE TEMPORARY DATES (FUTURE DATETIME NULL) INSERT INTO DATES (FUTURE) VALUES (CURDATE()) INSERT INTO DATES (FUTURE) VALUES (ADDDATE(CURDATE(), INTERVAL 1 DAY)) ... INSERT INTO DATES (FUTURE) VALUES (ADDDATE(CURDATE(), INTERVAL 14 DAY)) SELECT FUTURE FROM DATES WHERE FUTURE NOT IN (SELECT POSTDATE FROM POSTS) DROP TABLE TEMPORARY DATES END
我猜这是不可能选择 没有 数据的。
没错-SQL并不容易识别丢失的数据。通常的技术是将一个序列(有间隔)连接到一个完整序列上,并在后一个序列中选择那些元素,而数据中没有相应的伙伴。
因此,@BenHoffstein提出的维护永久日期表的建议是一个很好的建议。
简而言之,您可以使用整数表动态创建该日期范围。假设该integers表的列i号至少为0到13,并且您的表的日期列名为datestamp:
integers
i
datestamp
SELECT candidate_date AS missing FROM (SELECT CURRENT_DATE + INTERVAL i DAY AS candidate_date FROM integers WHERE i < 14) AS next_two_weeks LEFT JOIN my_table ON candidate_date = datestamp WHERE datestamp is NULL;