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

SQL Server 子查询多日期范围EXISTS校验 不使用UNION单查询实现

实现方案

你可以通过CTE预定义所有待统计的日期范围,再配合交叉关联实体表 + EXISTS校验的逻辑实现需求,完全不需要使用UNION拼接多段查询,也符合必须使用EXISTS做存在性判断的业务要求。

完整查询代码

-- 沿用你原有的变量定义即可
DECLARE @FortnightStart DATETIME = '2020/08/01', @FortnightEnd DATETIME = '2020/08/14 23:59:59'
DECLARE @QuarterStart DATE = '2020/04/01', @QuarterEnd DATE = '2020/06/30 23:59:59'

WITH DateRanges AS (
    -- 预定义所有需要统计的日期范围,新增范围只需在此处添加条目
    SELECT 'Fortnight' DateRange, @FortnightStart RangeStart, @FortnightEnd RangeEnd
    UNION ALL
    SELECT 'Quarter' DateRange, @QuarterStart RangeStart, @QuarterEnd RangeEnd
)
SELECT 
    e.EntityId,
    dr.DateRange,
    e.EntityName
FROM #Entity e
-- 生成所有「实体 + 日期范围」的待校验组合
CROSS JOIN DateRanges dr
WHERE EXISTS (
    SELECT 1 
    FROM #EntityDate d
    WHERE 
        d.EntityId = e.EntityId
        AND d.SubmittedDate BETWEEN dr.RangeStart AND dr.RangeEnd
)
ORDER BY dr.DateRange, e.EntityId

逻辑说明

  1. 先用CTE统一管理所有需要统计的日期范围,后续新增统计周期不需要修改核心逻辑,只需在CTE中新增对应条目即可
  2. 通过CROSS JOIN将实体表和日期范围表做笛卡尔积,得到所有需要校验的「实体+日期范围」组合
  3. 最后通过要求的EXISTS子句做过滤:仅保留该实体在对应日期范围内存在提交记录的组合,最终输出结果和你给出的预期输出完全一致
  4. 全程仅执行单次查询,没有使用UNION拼接多段查询结果,完全符合需求

内容的提问来源于stack exchange,提问作者SK-USA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:15:04