Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:Finden Sie fehlende Daten zwischen einem Datumsbereich

Dies ist eine zweite Antwort, ich werde sie separat posten.

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;

Dies ist ein Self-Join, der ein Datum meldet, sodass keine Zeile mit dem folgenden Datum vorhanden ist.

Dadurch wird der erste Tag in einer Lücke gefunden, aber wenn mehrere Tage fehlen, werden nicht alle Daten in der Lücke gemeldet.