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

SQL Server:关联两表实现测试前12个月问卷完成校验

修正后的SQL查询方案

原查询存在两个核心问题:

  • 时间判断逻辑完全颠倒,问卷日期应该落在测试日期的前12个月区间内,而非测试日期加365天后
  • 直接LEFT JOIN会因用户多条问卷/测试记录产生重复行,需改用存在性判断避免冗余

正确查询语句

SELECT 
    wt.[WalkTestPK],
    wt.[PersonID],
    wt.[CompletionDate],
    CASE 
        WHEN EXISTS (
            SELECT 1
            FROM Questionnaires q
            WHERE q.[Service Number] = wt.PersonID  -- 若Questionnaires表关联字段是PersonID,替换为q.PersonID = wt.PersonID
              AND q.[Completion time] >= DATEADD(month, -12, wt.CompletionDate)
              AND q.[Completion time] <= wt.CompletionDate
        ) THEN 'Yes'
        ELSE 'No'
    END AS [是否在测试前12个月内完成预测试问卷]
FROM [WalkTests] wt
ORDER BY wt.[WalkTestPK];

关键修正点说明

  • 时间逻辑修正:用DATEADD(month, -12, wt.CompletionDate)计算测试日期往前推12个月的起始点,判断问卷日期是否在[起始点, 测试日期]区间内(用month而非day更准确,规避闰年366天的误差)
  • 避免重复行:使用EXISTS子查询判断当前测试记录是否存在符合条件的问卷,确保每条测试记录仅返回一行结果
  • 字段名校验:请确认Questionnaires表的关联字段,若实际是PersonID而非[Service Number],需同步修改关联条件

内容的提问来源于stack exchange,提问作者Lloyd Thomas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:42:41