Heim > Datenbank > MySQL-Tutorial > Wie füllt man fehlende Daten in MySQL-Abfragen zwischen zwei Daten auf?

Wie füllt man fehlende Daten in MySQL-Abfragen zwischen zwei Daten auf?

Barbara Streisand
Freigeben: 2024-12-16 22:14:13
Original
528 Leute haben es durchsucht

How to Populate Missing Dates in MySQL Queries Between Two Dates?

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';
Nach dem Login kopieren

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';
Nach dem Login kopieren

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';
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage