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

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

Barbara Streisand
Barbara StreisandOriginal
2024-12-20 22:39:10413Durchsuche

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

Berechnen der Datensatzanzahl für Daten zwischen zwei Daten

Um die Anzahl der Datensätze zu berechnen, die in einen Datumsbereich für ein mehrachsiges Diagramm fallen, Wir müssen die Nichtübereinstimmung des Operandentyps in der ursprünglichen Abfrage überwinden. Um dieses Problem anzugehen, untersuchen wir alternative Ansätze, die Tally-Tabellen oder -Funktionen nutzen.

Eine hochleistungsfähige Lösung ist die Verwendung einer Tally-Tabelle oder -Funktion. Die bekannte Tally-Funktion von Itzik Ben-Gan kann wie folgt integriert werden:

DECLARE @StartDate date = '2020-11-01', @EndDate date = '2021-02-22';

  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 )
    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
    )
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

Dieser Ansatz generiert eine Datumsbereichstabelle für den angegebenen Zeitraum, die dann in einem Left Join mit der Tabelle tbl_Support_Requests verwendet wird, um die darin enthaltenen Datensätze zu zählen jeden Datumsbereich.

Das obige ist der detaillierte Inhalt vonWie kann man Datensätze innerhalb eines 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