You need to enable JavaScript to run this app. 基于日期区间筛选匹配对应导师名称的SQL查询问题
优惠活动
大模型
产品
解决方案
定价
更多

基于日期区间筛选匹配对应导师名称的SQL查询问题

问题

我有一张示例源表,目前查询时因为存在多名导师会返回多条记录,有源表查询结果示意图可供参考。
我需要实现的逻辑为:当exam_date处于某条记录的effective date与下一条记录的effective date区间内时,仅选中对应记录的tutor_name,有对应的期望输出结果示意图可供参考。

解决方案

你可以通过窗口函数LEAD先给每条导师配置记录生成对应的有效期截止时间,整理出每个导师的生效区间后再和考试表关联匹配即可,具体实现逻辑如下:

  • 先对导师配置表做预处理:按effective_date升序排序,用LEAD函数取后一条记录的生效日期作为当前记录的有效期截止值,最后一条没有后续记录的可以给一个极大日期(比如9999-12-31)作为截止值,覆盖所有未来的考试日期。
  • 关联考试表和预处理后的导师有效期表,用区间匹配规则筛选对应导师即可,注意用左开右闭的匹配规则避免边界日期重复匹配。

参考SQL代码如下:

-- 预处理生成导师的有效任职区间
WITH tutor_valid_period AS (
    SELECT 
        tutor_name,
        effective_date,
        -- 取后一条的生效日期作为当前的截止日期,最后一条默认到9999-12-31
        LEAD(effective_date, 1, '9999-12-31'::DATE) OVER (ORDER BY effective_date) AS expiry_date
    FROM tutor_config -- 替换为你实际的导师配置表名
)
SELECT 
    e.*,
    t.tutor_name
FROM exam e -- 替换为你实际的考试表名
LEFT JOIN tutor_valid_period t 
    ON e.exam_date >= t.effective_date 
    AND e.exam_date < t.expiry_date

上述写法可以保证每条考试记录只会匹配到唯一对应的导师,不会出现多记录重复返回的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 14:33:00