Heim >Datenbank >MySQL-Tutorial >Wie kann man Datensätze innerhalb eines bestimmten Datumsbereichs in SQL effizient zählen?
Zählen von Datensätzen zwischen zwei Daten
Um ein mehrachsiges Diagramm zu erstellen, benötigen Sie eine Zählung der Datensätze, die für jedes Datum innerhalb eines bestimmten Zeitraums erstellt wurden Datumsbereich.
Problemstellung
Der erste Versuch, eine Abfrage mithilfe eines Common zu erstellen Beim Tabellenausdruck (CTE) trat der Fehler „Operandentypkonflikt: datetime2 ist nicht mit int kompatibel“ auf. Dies resultierte aus einer Diskrepanz zwischen dem Datentyp datetime2, der für den Datumsbereich verwendet wurde, und der erwarteten Ganzzahl für den Tagesversatz.
Lösung
Um dieses Problem zu beheben, eine Bilanz Eine Tabelle oder Funktion kann eine bessere Leistung bieten. Eine solche von Itzik Ben-Gan erstellte Tally-Table-Funktion wird hier vorgestellt:
WITH L0 AS ( SELECT 1 AS c FROM (VALUES(1),(1),(1),(1),(1),(1),(1),(1), (1),(1),(1),(1),(1),(1),(1),(1)) AS D(c) ), L1 AS ( SELECT 1 AS c FROM L0 AS A CROSS JOIN L0 AS B ), L2 AS ( SELECT 1 AS c FROM L1 AS A CROSS JOIN L1 AS B ), Nums AS ( SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS rownum FROM L2 )
Basierend auf dieser Tally-Tabelle kann der Date_Range_T CTE erstellt werden:
Date_Range_T (d_range) AS ( SELECT TOP(DATEDIFF(day, @StartDate, @EndDate) + 1) DATEADD(day, rownum - 1, @StartDate) AS d_range, DATEADD(day, rownum, @StartDate) AS d_rangeNext FROM Nums )
This Date_Range_T CTE stellt den Datumsbereich zwischen @StartDate und @EndDate bereit.
Zur Berechnung der Anzahl der Datensätze für Für jedes Datum kann eine Abfrage wie folgt geschrieben werden:
SELECT d_range, COUNT(Id) AS Total FROM Date_Range_T LEFT JOIN tbl_Support_Requests R ON R.CreatedDate >= T.d_range AND R.CreatedDate < T.d_rangeNext GROUP BY d_range ORDER BY d_range ASC
Diese Abfrage gibt das gewünschte Ergebnis zurück: eine Anzahl von Datensätzen für jedes Datum innerhalb des angegebenen Datumsbereichs.
Das obige ist der detaillierte Inhalt vonWie kann man Datensätze innerhalb eines bestimmten Datumsbereichs in SQL effizient zählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!