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

SQL-Abfrage, die alle Daten zurückgibt, die nicht in einer Tabelle verwendet werden

Sie haben Recht – SQL macht es nicht einfach, fehlende Daten zu identifizieren. Die übliche Technik besteht darin, Ihre Sequenz (mit Lücken) mit einer vollständigen Sequenz zu verbinden und diese Elemente in der letzteren Sequenz ohne einen entsprechenden Partner in Ihren Daten auszuwählen.

Also @BenHoffsteins Vorschlag eine permanente Datumstabelle zu führen ist eine gute Sache.

Abgesehen davon können Sie diesen Datumsbereich dynamisch mit einem Ganzzahltabelle . Angenommen die integers Tabelle hat eine Spalte i mit Zahlen von mindestens 0 – 13, und dass Ihre Tabelle eine Datumsspalte mit dem Namen datestamp hat :

   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;