You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求SQL Server中按日统计活跃任务数的T-SQL查询语句

解决方案

在SQL Server中可以通过**递归CTE(公共表表达式)**生成目标日期范围,再关联任务表统计每日活跃任务数,具体实现如下:

假设任务表名为Tasks,执行以下T-SQL语句:

WITH DateRange AS (
    -- 初始化:获取表中最早的任务开始日期
    SELECT MIN(StartDate) AS [Day]
    FROM Tasks
    UNION ALL
    -- 递归生成后续日期,直到覆盖最晚的任务结束日期
    SELECT DATEADD(DAY, 1, [Day])
    FROM DateRange
    WHERE [Day] < (SELECT MAX(EndDate) FROM Tasks)
)
-- 统计每日活跃任务数量
SELECT 
    dr.[Day],
    COUNT(t.Task) AS NumberOfActiveTasks
FROM DateRange dr
LEFT JOIN Tasks t 
    ON dr.[Day] BETWEEN t.StartDate AND t.EndDate
GROUP BY dr.[Day]
ORDER BY dr.[Day]
OPTION (MAXRECURSION 0); -- 解除递归次数默认限制(默认最多100次)

代码说明:

  1. 递归CTE生成日期序列:
    • 第一部分先获取表中所有任务的最早StartDate作为起始日期;
    • 第二部分通过DATEADD每天递增1,直到日期达到表中最晚的EndDate,生成完整的日期范围。
  2. 关联统计活跃任务:
    • 使用LEFT JOIN确保所有日期都被保留(即使当天无活跃任务);
    • 通过COUNT(t.Task)统计满足StartDate ≤ 当日日期 ≤ EndDate的任务数(LEFT JOIN未匹配时Task为NULL,COUNT会自动忽略)。
  3. 递归次数限制:
    • SQL Server默认递归CTE最多执行100次,若日期范围超过100天,需添加OPTION (MAXRECURSION 0)取消限制。

内容的提问来源于stack exchange,提问作者marco birchler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:10:47