首页 > 数据库 > mysql教程 > 如何在SQL中高效统计特定日期范围内的记录?

如何在SQL中高效统计特定日期范围内的记录?

Patricia Arquette
发布: 2024-12-18 16:42:11
原创
740 人浏览过

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

计算两个日期之间的记录

要生成多轴图表,您需要计算指定时间内为每个日期创建的记录数日期范围。

问题语句

使用公用表表达式 (CTE) 创建查询的初始尝试遇到错误“操作数类型冲突:datetime2 与 int 不兼容”。这是由于用于日期范围的 datetime2 数据类型与天数偏移量的预期整数不匹配造成的。

解决方案

要解决此问题,需要使用计数表或函数可以提供更好的性能。这里介绍了由 Itzik Ben-Gan 创建的这样一个统计表函数:

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 CTE:

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
    )
登录后复制

此 Date_Range_T CTE 提供 @StartDate 和 @StartDate 之间的日期范围@EndDate.

要计算每个日期的记录数,可以编写如下查询:

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
登录后复制

此查询将返回所需的结果:每个日期的记录数指定日期范围内的日期。

以上是如何在SQL中高效统计特定日期范围内的记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板