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

如何用SQL实现重叠时间区间的表关联与多匹配类型标记

SQL实现方案

核心思路是先完成两表的区间匹配关联,再针对每个time_sample统计匹配到的TABLE1记录数,按规则生成最终的job_type字段,写法兼容MySQL 8+、Hive、Spark SQL等主流支持窗口函数的SQL引擎。

可直接运行的SQL代码

WITH match_detail AS (
    SELECT 
        t2.job,
        t2.time_sample,
        t1.job_type,
        COUNT(t1.job_id) OVER (PARTITION BY t2.job, t2.time_sample) AS match_cnt
    FROM TABLE2 t2
    LEFT JOIN TABLE1 t1
        ON t2.job = t1.job
        -- 时间字段若为字符串存储,建议先转DATETIME/TIMESTAMP类型再做区间判断,避免比较逻辑出错
        AND t2.time_sample >= t1.start_time
        AND t2.time_sample <= t1.end_time
)
SELECT 
    job,
    time_sample,
    CASE
        WHEN match_cnt = 0 THEN NULL
        WHEN match_cnt > 1 THEN 'MULTIPLE'
        ELSE MAX(job_type)
    END AS job_type
FROM match_detail
GROUP BY job, time_sample, match_cnt
ORDER BY time_sample;

逻辑说明

  • 第一层CTE完成基础关联:按照job字段相等、time_sample落在start_time和end_time闭区间内的规则,关联出所有命中的明细记录
  • 用窗口函数直接统计每个job + time_sample维度下命中的TABLE1记录总数,不需要提前分组就能拿到单条采样点的匹配数量
  • 最后分组输出结果:命中数大于1直接标记为MULTIPLE,命中数为1时取对应记录的job_type即可,运行结果和给出的期望输出完全一致。

踩坑提示:如果时间字段是字符串格式存储(比如示例里的6/9/22 10:59格式),关联前务必先用STR_TO_DATE(MySQL)、to_timestamp(Hive/Spark)转成标准时间类型,否则字符串字典序和实际时间顺序不一致时,区间判断会出现逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:24:13