计算两个日期之间的记录
要生成多轴图表,您需要计算指定时间内为每个日期创建的记录数日期范围。
问题语句
使用公用表表达式 (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中文网其他相关文章!