Heim >Datenbank >MySQL-Tutorial >Wie füllt man fehlende Daten in MySQL-Datumsbereichen aus?
Fehlende Daten im Datumsbereich in MySQL ergänzen
In MySQL erfordert der Umgang mit fehlenden Daten die Ermittlung des erforderlichen Datums und das Füllen der Lücke mit dem entsprechenden Wert. Glücklicherweise gibt es eine Lösung, und sie beinhaltet die Verwendung des Tabellentricks NUMBERS, um eine aufsteigende Liste von Datumsangaben zu erstellen.
Erstellen Sie zunächst eine NUMBERS-Tabelle mit einer automatisch inkrementierenden ID-Spalte:
<code class="language-sql">CREATE TABLE numbers ( id int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;</code>
Verwenden Sie eine INSERT-Anweisung, um die Tabelle mit der erforderlichen Anzahl von Werten zu füllen.
Als nächstes verwenden Sie DATE_ADD, um eine Datumsliste basierend auf dem ID-Wert zu generieren:
<code class="language-sql">SELECT DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) FROM `numbers` `n` WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` -1 DAY) <= '2010-06-14'</code>
Ersetzen Sie „2010-06-06“ und „2010-06-14“ durch Ihr eigenes Start- bzw. Enddatum.
Führen Sie abschließend LEFT JOIN basierend auf dem Zeitteil und der Datentabelle aus:
<code class="language-sql">SELECT `x`.`ts` AS `timestamp`, COALESCE(`y`.`score`, 0) AS `cnt` FROM (SELECT DATE_FORMAT(DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY), '%Y-%m-%d') AS `ts` FROM `numbers` `n` WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) <= '2010-06-14') x LEFT JOIN `y` ON STR_TO_DATE(`y`.`date`, '%d.%m.%Y') = STR_TO_DATE(`x`.`ts`, '%Y-%m-%d')</code>
In dieser Abfrage werden fehlende Daten mit 0 aufgefüllt. Um das ursprüngliche Datumsformat beizubehalten, verwenden Sie DATE_FORMAT(x.ts, '%d.%m.%Y') AS timestamp
. Beachten Sie, dass die Tabelle y
hier geändert wurde, um sicherzustellen, dass das Datumsformat konsistent ist und die Funktion STR_TO_DATE
zur Konvertierung verwendet wird. Dies ist zuverlässiger als die Methode im Originalartikel.
Das obige ist der detaillierte Inhalt vonWie füllt man fehlende Daten in MySQL-Datumsbereichen aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!