Heim >Datenbank >MySQL-Tutorial >Wie kann man Datensätze innerhalb eines bestimmten Datumsbereichs in SQL effizient zählen?

Wie kann man Datensätze innerhalb eines bestimmten Datumsbereichs in SQL effizient zählen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-18 16:42:11742Durchsuche

How to Efficiently Count Records Within a Specific Date Range in SQL?

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!

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