Füllen fehlender Daten beim Abrufen von Daten zwischen zwei Daten in MySQL
In MySQL ist dies der Fall, wenn Daten zwischen zwei Daten mithilfe des BETWEEN-Operators ausgewählt werden Es ist möglich, dass für einige Daten innerhalb des angegebenen Bereichs keine entsprechenden Daten vorliegen. Dies kann zu leeren oder fehlenden Zeilen in den Abfrageergebnissen führen.
Problemstellung:
Betrachten Sie eine Tabelle mit dem Namen „tbl“ mit Daten, die mit Datumsangaben verknüpft sind, wie unten gezeigt :
Date | Data |
---|---|
2009-06-25 | 75 |
2009-07-01 | 100 |
2009-07-02 | 120 |
Wenn wir alle Daten zwischen dem 25.06.2009 und abrufen möchten '2009-07-01' mit der folgenden Abfrage:
SELECT data FROM tbl WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
Die Abfrage würde nur Zeilen mit vorhandenen Daten innerhalb des angegebenen Bereichs zurückgeben. Dies bedeutet, dass Daten ohne Daten, wie „26.06.2009“, „27.06.2009“ und „28.06.2009“, in den Ergebnissen weggelassen werden.
Lösung: Kalendertabellen zum Auffüllen fehlender Daten
Um dieses Problem zu beheben und alle Daten innerhalb des angegebenen Bereichs einzubeziehen, Unabhängig davon, ob Daten für sie vorhanden sind, können wir ein Konzept namens „Kalendertabellen“ verwenden. Diese Tabellen helfen dabei, eine Folge von Daten innerhalb eines bestimmten Intervalls zu generieren und dienen im Wesentlichen als „Pseudo“-Tabelle aller möglichen Daten.
Hier ist ein Beispiel für die Erstellung einer Kalendertabelle in MySQL:
-- Create a table with integers from 0 to 9 CREATE TABLE ints (i INTEGER); INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); -- Generate a sequence of dates from '2009-06-25' to '2009-07-01' SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY AS date FROM ints a JOIN ints b WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
Sobald Sie die Kalendertabelle erstellt haben, können Sie eine Linksverknüpfung mit Ihrer Datentabelle durchführen, um die fehlenden Daten zu füllen. Hier ist die aktualisierte Abfrage:
SELECT cal.date, tbl.data FROM ( SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY AS date FROM ints a JOIN ints b WHERE date BETWEEN '2009-06-25' AND '2009-07-01' ) cal LEFT JOIN tbl ON cal.date = tbl.date WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
Diese Abfrage ruft alle Daten innerhalb des angegebenen Bereichs ab, einschließlich der Daten ohne Daten in der Tabelle „tbl“. Daten mit fehlenden Daten haben in der Spalte „Daten“ einen NULL-Wert.
Das obige ist der detaillierte Inhalt vonWie füllt man fehlende Daten in MySQL-Abfragen zwischen zwei Daten auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!