Datenlücken für Datumsbereiche in MySQL füllen
Es kann vorkommen, dass es notwendig wird, Daten zwischen zwei bestimmten Daten abzurufen, auch wenn Für bestimmte Daten innerhalb dieses Bereichs sind keine Einträge vorhanden. Um dieser Herausforderung zu begegnen, besteht ein beliebter Ansatz darin, „Kalendertabellen“ zu erstellen.
Beachten Sie die folgende Tabellenstruktur:
CREATE TABLE data ( date DATE, value INT ); INSERT INTO data VALUES ('2009-06-25', 75), ('2009-07-01', 100), ('2009-07-02', 120);
Um alle Daten zwischen dem 25.06.2009 und abzurufen '2009-07-01' kann die folgende Abfrage verwendet werden:
SELECT date, value FROM data WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
Diese Abfrage schließt jedoch alle Daten innerhalb des aus angegebenen Bereich, dem keine Daten zugeordnet sind. Um dies zu beheben, wird eine Kalendertabelle verwendet.
Um eine Kalendertabelle für den angegebenen Datumsbereich zu erstellen, können die folgenden Schritte ausgeführt werden:
CREATE TABLE cal ( date DATE ); INSERT INTO cal (date) SELECT DATE_ADD('2009-06-25', INTERVAL i * 10 + j DAY) FROM ints i CROSS JOIN ints j WHERE DATE_ADD('2009-06-25', INTERVAL i * 10 + j DAY) BETWEEN '2009-06-25' AND '2009-07-01';
Die Kalendertabelle enthält alle Daten zwischen „25.06.2009“ und „01.07.2009“, jedoch ohne zugehörige Daten. Um die gewünschten Daten zusammen mit den Lücken abzurufen, kann ein Left Join verwendet werden:
SELECT cal.date, data.value FROM cal LEFT JOIN data ON cal.date = data.date WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
Diese Abfrage gibt alle Daten innerhalb des angegebenen Bereichs zurück, einschließlich der Daten ohne Daten, die mit NULL-Werten für dargestellt werden die Wertespalte.
Das obige ist der detaillierte Inhalt vonWie kann ich fehlende Daten in MySQL-Abfragen für vollständige Datumsbereiche ergänzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!