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

SQL Server中如何按日期范围生成每日测试数据查询结果

解决方案

要实现指定日期范围内每个测试每天生成一行记录的需求,核心是生成目标日期序列,再将测试列表与日期序列做交叉关联,同时保留原有的表关联逻辑。

步骤说明

  1. 生成日期范围序列:用递归CTE创建从起始日期到结束日期的所有日期。
  2. 交叉关联测试与日期:将所有测试信息和日期序列做CROSS JOIN,让每个测试在指定范围内的每一天都有一条记录。
  3. 关联统计数据:保留原有的LEFT JOIN逻辑关联统计表,若没有对应日期的统计数据则显示NULL。

完整SQL语句

-- 定义日期范围,替换这里的起止日期即可
WITH DateRange AS (
    SELECT CAST('2023-06-01' AS DATE) AS DateVal
    UNION ALL
    SELECT DATEADD(DAY, 1, DateVal)
    FROM DateRange
    WHERE DateVal < CAST('2023-06-03' AS DATE)
)
SELECT 
    l.testname AS Test,
    ds.tests_morning,
    ds.tests_evening,
    FORMAT(dr.DateVal, 'dd/MM/yyyy') AS Date -- 格式化日期为目标格式
FROM labtests_hajj l
INNER JOIN departments d ON l.dept_id = d.dept_id
CROSS JOIN DateRange dr
-- 若departments_statistics表包含日期字段,添加AND ds.Date = dr.DateVal来精准匹配对应日期的统计数据
LEFT JOIN departments_statistics ds ON ds.test_id = l.testid
ORDER BY dr.DateVal, l.testname;

关键细节

  • 替换DateRange CTE中的起止日期,即可调整生成的日期范围。
  • 使用FORMAT函数将日期格式化为dd/MM/yyyy,匹配你示例中的输出格式。
  • 如果departments_statistics表有记录统计数据的日期字段,请在LEFT JOIN条件中添加AND ds.Date = dr.DateVal,这样能匹配到对应日期的统计值,否则会保留原关联逻辑返回NULL。

内容的提问来源于stack exchange,提问作者Ziad Adnan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:43:40