Heim >Datenbank >MySQL-Tutorial >Wie erstelle ich eine Liste von Daten innerhalb eines bestimmten Bereichs ohne Schleifen oder temporäre Tabellen?

Wie erstelle ich eine Liste von Daten innerhalb eines bestimmten Bereichs ohne Schleifen oder temporäre Tabellen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-23 17:07:10928Durchsuche

How to Generate a List of Dates Within a Specific Range Without Loops or Temporary Tables?

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!

Stellungnahme:
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