Heim >Datenbank >MySQL-Tutorial >Wie zeige ich alle Daten zwischen zwei Daten an, einschließlich Nullwerten für fehlende Daten?

Wie zeige ich alle Daten zwischen zwei Daten an, einschließlich Nullwerten für fehlende Daten?

Linda Hamilton
Linda HamiltonOriginal
2024-12-23 02:08:10831Durchsuche

How to Show All Dates Between Two Dates, Including Zero Values for Missing Dates?

Anzeige aller Datumsdaten zwischen zwei Datumsangaben, einschließlich Nullwerten

Bei der Arbeit mit Datumsdaten kommt es häufig vor, dass nicht alle Datumsangaben vorliegen werden in Ihrem Datensatz dargestellt. Dies kann zu Lücken in Ihrer Analyse führen. Um dieses Problem zu lösen und alle Daten innerhalb eines bestimmten Bereichs anzuzeigen, können wir eine Kombination von Techniken verwenden.

Betrachten wir das folgende Problem:

Wir haben eine Tabelle namens @temp mit der folgenden Struktur :

DECLARE @temp TABLE (
    ID INT IDENTITY(1,1) NOT NULL,
    CDate SMALLDATETIME,
    Val INT
)

Die Tabelle enthält Daten vom 2. Oktober 2012 bis 15. Oktober 2012. Wir wollen jedoch um alle Daten zwischen dem 1. Oktober 2012 und dem 15. Oktober 2012 abzurufen und Nullwerte für alle fehlenden Daten anzuzeigen.

Ein Ansatz, dies zu handhaben, ist die Verwendung eines rekursiven allgemeinen Tabellenausdrucks (CTE) mit einer Kalendertabelle Generieren Sie alle Daten innerhalb des angegebenen Bereichs. Der CTE ist wie folgt definiert:

;WITH d(date) AS (
    SELECT CAST('10/01/2012' AS DATETIME),
    UNION ALL
    SELECT date + 1
    FROM d
    WHERE date < '10/15/2012'
)

Dieser CTE generiert alle Daten vom 1. Oktober 2012 bis 15. Oktober 2012.

Als nächstes verbinden wir den CTE mit der @temp-Tabelle Rufen Sie die entsprechenden Werte für jedes Datum ab und behandeln Sie fehlende Daten mithilfe der NULL-Verarbeitungsfunktion ISNULL, wie im Folgenden gezeigt Abfrage:

SELECT t.ID, d.date AS CDate, ISNULL(t.val, 0) AS val
FROM d
LEFT JOIN temp t ON t.CDate = d.date
ORDER BY d.date
OPTION (MAXRECURSION 0)

Die OPTION (MAXRECURSION 0) wird verwendet, um die Anzahl der Rekursionen im CTE zu begrenzen und sicherzustellen, dass die Abfrage nicht unbegrenzt ausgeführt wird. Wenn Sie dies auf 0 setzen, ist eine unbegrenzte Rekursion möglich.

Diese Abfrage liefert das gewünschte Ergebnis und zeigt alle Daten zwischen dem 1. Oktober 2012 und dem 15. Oktober 2012 an, mit Nullwerten für alle fehlenden Daten.

Das obige ist der detaillierte Inhalt vonWie zeige ich alle Daten zwischen zwei Daten an, einschließlich Nullwerten für fehlende Daten?. 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