Fehlende Daten im Datumsbereich in MySQL ergänzen
In einigen Fällen können Tabellen mit fehlenden Daten innerhalb eines Datumsbereichs auftreten. Dies kann den Datenanalyse- und Darstellungsprozess stören. Um diese Lücke zu schließen, bietet MySQL eine Lösung zum Auffüllen fehlender Daten mit angegebenen numerischen Werten.
Betrachten wir das Beispiel einer Tabelle, in der die mit einem bestimmten Datum verbundenen Ergebnisse aufgezeichnet werden. Wenn einige Daten weggelassen werden, besteht unser Ziel darin, sie mit Platzhalterwerten (z. B. 0) zu ergänzen, um einen zusammenhängenden Bereich zu erhalten.
Herausforderungen meistern
MySQL verfügt nicht über native rekursive Funktionalität, aber wir können den Tabellentrick NUMBERS verwenden, um Datumssequenzen basierend auf automatisch inkrementierenden Spalten zu generieren.
Datumsfolge generieren
<code class="language-sql">DROP TABLE IF EXISTS `numbers`; CREATE TABLE `numbers` ( `id` int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;</code>
<code class="language-sql">INSERT INTO `numbers` ( `id` ) VALUES ( NULL ); -- 添加足够多的空行以覆盖所需的日期范围</code>
Dadurch werden so viele Zeilen generiert, wie der Datumsbereich erfordert. (Hinweis: Die Anzahl der eingefügten Zeilen muss entsprechend dem Datumsbereich angepasst werden. Durch einfaches Einfügen von NULL
können nicht automatisch genügend Zeilen generiert werden.)
<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 die Daten „06.06.2010“ und „14.06.2010“ durch die gewünschten Start- und Enddaten im Format JJJJ-MM-TT.
Füllen Sie fehlende Daten ein
<code class="language-sql">SELECT `x`.`timestamp` 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 `timestamp` 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`, '%Y-%m-%d') = `x`.`timestamp`;</code>
Ersetzen Sie y
durch Ihre tatsächliche Datentabelle und passen Sie das Datumsformat entsprechend an. (Es wird empfohlen, ein einheitliches YYYY-MM-DD
-Format zu verwenden, um Probleme durch die Formatkonvertierung zu vermeiden)
Durch Ausführen dieser Abfrage erhalten Sie den vollständigen Satz von Datumsangaben im angegebenen Bereich, wobei fehlende Werte mit dem angegebenen Wert 0 aufgefüllt werden. (Hinweis: numbers
Die Tabelle muss vorab mit genügend Zeilen gefüllt sein, um sicherzustellen, dass der gesamte Datumsbereich abgedeckt ist.)
Das obige ist der detaillierte Inhalt vonWie füllt man fehlende Daten in einem MySQL-Datumsbereich aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!