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

求第一个表中与第二个表无重叠的日期区间(已尝试Join无效)

解决方案

要筛选出第一个表(记为Table1)中与第二个表(记为Table2)所有日期范围均无重叠的记录,核心是判断Table1的某条记录不存在任何Table2的记录与之重叠。

核心逻辑

两个日期范围[AStart, AEnd]和[BStart, BEnd]重叠的条件是:
AStart <= BEnd AND AEnd >= BStart

反过来,要找Table1中与所有Table2记录都不重叠的行,就是确认不存在任何Table2记录满足上述重叠条件。

方法1:使用NOT EXISTS(推荐,性能更优)

SELECT a.*
FROM Table1 a
WHERE NOT EXISTS (
    SELECT 1
    FROM Table2 b
    -- 如果需要按员工ID关联对比,添加下面这行
    -- WHERE a.EmpID = b.EmpID
    WHERE a.StartDate <= b.EndDate 
      AND a.EndDate >= b.StartDate
);

方法2:使用LEFT JOIN

SELECT a.*
FROM Table1 a
LEFT JOIN Table2 b
  ON a.StartDate <= b.EndDate 
  AND a.EndDate >= b.StartDate
  -- 如果需要按员工ID关联对比,添加下面这行
  -- AND a.EmpID = b.EmpID
WHERE b.ID IS NULL; -- 替换为Table2的主键字段

说明

  • 请根据实际表结构替换Table1、Table2以及对应的字段名(如StartDate、EndDate、EmpID)。
  • 如果只需要对比同一员工的日期范围,取消注释对应的关联条件即可。

内容的提问来源于stack exchange,提问作者Alka Ojha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:52:38