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

SQL查询指定日期范围内对应ID编号的最优实现方法

SQL查询实现方案

核心匹配逻辑

首先明确规则的底层判断逻辑:只要ID的生效时间段和查询的24小时窗口存在重叠,就返回对应ID,拆解如下:

  • 每日凌晨4点执行时,查询窗口固定为 [前一天凌晨4点, 当日凌晨4点)
  • ID的生效区间为 [Start Time, EndTime),EndTime为NULL代表ID当前仍在生效
  • 区间重叠判断条件:ID生效起始时间 < 窗口结束时间,且(ID失效时间 > 窗口起始时间 或 ID失效时间为NULL)

各数据库实现写法

MySQL版本

-- 预定义查询窗口
SET @window_start = DATE_SUB(CURDATE(), INTERVAL 1 DAY) + INTERVAL 4 HOUR;
SET @window_end = CURDATE() + INTERVAL 4 HOUR;

-- 执行查询
SELECT ID 
FROM 你的表名
WHERE `Start Time` < @window_end
AND (EndTime > @window_start OR EndTime IS NULL);

PostgreSQL版本

SELECT ID
FROM 你的表名
WHERE "Start Time" < CURRENT_DATE + INTERVAL '4 hours'
AND (EndTime > CURRENT_DATE - INTERVAL '1 day' + INTERVAL '4 hours' OR EndTime IS NULL);

结果验证

  • 当查询窗口为2021-08-10 04:00 ~ 2021-08-11 04:00时:
    ID2111的失效时间晚于窗口起始时间,ID2112的生效时间早于窗口结束时间且仍在生效,返回2111、2112,符合要求
  • 当查询窗口为2021-08-11 04:00 ~ 2021-08-12 04:00时:
    ID2111的失效时间早于窗口起始时间被过滤,仅ID2112符合条件,返回2112,符合要求

性能优化建议

给Start Time和EndTime字段添加联合索引,可避免全表扫描,大数据量场景下查询效率提升明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:18:03