Maison > base de données > tutoriel mysql > Comment compter efficacement les enregistrements dans une plage de dates en SQL ?

Comment compter efficacement les enregistrements dans une plage de dates en SQL ?

Barbara Streisand
Libérer: 2024-12-20 22:39:10
original
417 Les gens l'ont consulté

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

Calcul du nombre d'enregistrements pour des dates comprises entre deux dates

Pour calculer le nombre d'enregistrements compris dans une plage de dates pour un graphique multi-axes, nous devons surmonter l'inadéquation des types d'opérandes dans la requête d'origine. Pour résoudre ce problème, nous explorons des approches alternatives qui exploitent des tables ou des fonctions de pointage.

Une solution très performante consiste à utiliser une table ou une fonction de pointage. La célèbre fonction de comptage d'Itzik Ben-Gan peut être incorporée comme suit :

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
Copier après la connexion

Cette approche génère une table de plage de dates pour la période spécifiée, qui est ensuite utilisée dans une jointure gauche avec la table tbl_Support_Requests pour compter les enregistrements dans chaque plage de dates.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal