Heim >Datenbank >MySQL-Tutorial >Wie erstelle ich eine Liste von Daten innerhalb eines bestimmten Bereichs ohne Schleifen oder temporäre Tabellen?
Datum aus Datumsbereich generieren
Eine häufige Aufgabe bei der Datenanalyse besteht darin, ein bestimmtes Datum aus einem bestimmten Datumsbereich zu extrahieren. Beispielsweise müssen Sie möglicherweise Daten von „20.01.2010“ bis „24.01.2010“ abrufen.
Lösung ohne Schleifen oder temporäre Tabellen
Um dies zu erreichen, ohne Schleifen, Prozeduren oder temporäre Tabellen zu verwenden, können wir eine Unterabfrage nutzen, um eine Datumssequenz zu generieren:
<code class="language-sql">SELECT a.Date FROM ( SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a)) DAY AS Date FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS d ) a WHERE a.Date BETWEEN '2010-01-20' AND '2010-01-24'</code>
Diese Unterabfrage generiert eine Datumsreihe, die sich über etwa 10.000 Tage erstreckt. Sie können die Anzahl der Tage anpassen, indem Sie den Bereich in der Unterabfrage erweitern oder verkleinern.
Ausgabe
Die Abfrage gibt die folgenden Daten zurück:
<code>Date ---------- 2010-01-20 2010-01-21 2010-01-22 2010-01-23 2010-01-24</code>
Leistungshinweise
Die Leistung dieser Abfrage ist sehr gut und wird über einen Zeitraum von 5 Tagen in 0,0009 Sekunden ausgeführt. Selbst bei einer Reichweite von 100.000 Tagen dauert es nur 0,0458 Sekunden.
Kompatibilität und Portabilität
Diese Technologie ist mit nur geringfügigen Anpassungen mit den meisten Datenbanken kompatibel. Beispielsweise möchten Sie möglicherweise die Funktion CURDATE() durch die entsprechende Funktion in Ihrer spezifischen Datenbank ersetzen.
Das obige ist der detaillierte Inhalt vonWie erstelle ich eine Liste von Daten innerhalb eines bestimmten Bereichs ohne Schleifen oder temporäre Tabellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!