Heim > Datenbank > MySQL-Tutorial > Wie füllt man fehlende Daten in einem MySQL-Datumsbereich aus?

Wie füllt man fehlende Daten in einem MySQL-Datumsbereich aus?

Mary-Kate Olsen
Freigeben: 2025-01-23 17:02:10
Original
411 Leute haben es durchsucht

How to Fill Missing Dates in a MySQL Date Range?

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

  1. ZAHLEN-Tabelle erstellen:
<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>
Nach dem Login kopieren
  1. Tabelle ausfüllen:
<code class="language-sql">INSERT INTO `numbers`
  ( `id` )
VALUES
  ( NULL ); -- 添加足够多的空行以覆盖所需的日期范围</code>
Nach dem Login kopieren

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.)

  1. Datumsfolge erstellen:
<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>
Nach dem Login kopieren

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

  1. LEFT JOIN erstellen:
<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>
Nach dem Login kopieren

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: numbersDie 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!

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