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

如何筛选无日期重叠的工单数据行?

问题:筛选无重叠的工单日期范围(用于判断指定日期是否有工单)

我们有一张存储产品工单日期信息的表,每行对应一个工单,包含id、start_date(开始日期)、end_date(结束日期)和product_id(产品ID)。同一产品的多个工单日期可能存在重叠,现在需要筛选出无重叠的日期范围行,以此简化后续判断指定日期是否有工单的逻辑。

初始数据

idstart_dateend_dateproduct_id
12898110/8/202410/12/2024756
12565410/9/202410/9/2024756
12903410/12/202410/15/2024756
12717110/13/202410/13/2024756
12779610/15/202410/15/2024756

期望筛选结果

idstart_dateend_dateproduct_id
12898110/8/202410/12/2024756
12903410/12/202410/15/2024756

解决方案SQL语句

核心思路是排除那些被其他工单日期范围完全包含的行,保留覆盖范围最广的顶层工单:

SELECT t1.*
FROM your_table_name t1
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table_name t2
    WHERE t2.product_id = t1.product_id
      AND t2.id != t1.id
      AND t2.start_date <= t1.start_date
      AND t2.end_date >= t1.end_date
);

说明

  • 替换语句中的your_table_name为实际表名
  • NOT EXISTS子查询会检查同一产品下是否存在其他工单,其日期范围完全覆盖当前工单的日期区间
  • 若存在这样的覆盖工单,当前工单会被排除;最终保留的就是无重叠的、覆盖范围最完整的工单行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:40:02