MySQL:查找日期范围之间的缺失日期

标签 mysql date gaps-and-islands

我需要一些关于 mysql 查询的帮助。我有一个数据库表,其中包含从 2011 年 1 月 1 日到 2011 年 4 月 30 日的数据。每个日期都应该有一条记录。我需要查明表中是否缺少任何日期。

例如,假设 2011 年 2 月 2 日没有数据。我如何找到那个日期?

我将日期存储在名为 reportdatetime 的列中。日期以以下格式存储:2011-05-10 0:00:00,即 2011 年 5 月 5 日凌晨 12:00:00。

有什么建议吗?

最佳答案

这是第二个答案,我会单独发布。

SELECT DATE(r1.reportdate) + INTERVAL 1 DAY AS missing_date
FROM Reports r1
LEFT OUTER JOIN Reports r2 ON DATE(r1.reportdate) = DATE(r2.reportdate) - INTERVAL 1 DAY
WHERE r1.reportdate BETWEEN '2011-01-01' AND '2011-04-30' AND r2.reportdate IS NULL;

这是一个自联接,它报告一个日期,因此不存在跟在该日期之后的行。

这将找到间隔中的第一天,但​​如果缺少多天的运行,它不会报告间隔中的所有日期。

关于MySQL:查找日期范围之间的缺失日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6551179/

相关文章:

mysql - Mysql搜索查询优化

php - 将 Wordpress 复制到 Staging 丢失 wp_options

java - 用于在 Java 中 pretty-print 时间段的库,仅提供最重要的字段

javascript - DOB 的 JQuery 日历可在月、年或日期更改时反射(reflect)更改

sql - 计算日期之间的空值

sql - 如何识别 SQL 中的连续日期组?

MySQL服务器没有得到充分利用; threads_running 小于 2

php - Mysql自动插入一个值

bash - 如何在 Shell 中解析日期?

sql-server - 根据列查找日期范围