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

MySQL中如何判断用户日期区间与其他用户重叠并标记对应状态

MySQL用户日期区间重叠标记最简实现方案

核心逻辑前置说明

两个日期区间判断重叠的通用公式非常容易理解:对于区间A[start_a, end_a]和区间B[start_b, end_b],只要满足start_a < end_b AND start_b < end_a,两个区间就存在重叠。
逻辑本质是:A的开始时间早于B的结束时间,同时B的开始时间也早于A的结束时间,两个区间必然有重叠部分。

最简实现SQL

使用EXISTS子查询实现,逻辑最直观,适合SQL新手理解:

SELECT
    `User`,
    CASE
        WHEN EXISTS (
            SELECT 1 FROM dates_range d2
            -- 排除和自己的区间做比较
            WHERE d2.`User` != dates_range.`User`
            -- 套用日期重叠判断公式
            AND dates_range.start_date < d2.end_date
            AND d2.start_date < dates_range.end_date
        ) THEN 'Overlap'
        ELSE 'No_Overlap'
    END AS status
FROM dates_range;

代码逻辑说明

  • 外层查询逐行遍历每一个用户的日期区间
  • 内层EXISTS子查询专门校验是否存在其他用户的区间和当前用户区间重叠
  • 找到符合条件的重叠记录就标记为Overlap,找不到就标记为No_Overlap

运行结果

执行上述SQL可直接得到你需要的输出:

User  status
U1    Overlap
U2    Overlap
U3    Overlap
U4    No_Overlap

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:06:03