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

请求协助实现两表数据匹配:基于日期区间与A列关联

数据表匹配问题解决方案

问题说明

需将两张数据表按以下规则完成匹配:

  • 表2的D列日期必须落在表1的D-E日期区间内
  • 关联条件包含A列(A列值允许为空)
    此前使用join连接两表得到18行错误结果,不符合预期。

数据表示例

表1数据

A           B            C          D         E               G      

600       MT_000        6765    29-04-23    30-04-23    WEEK
          MT            6758    01-05-23    31-05-23    MONTH
601       MT_0001       6771    01-06-23    30-06-23    WEEK

表2数据

A       B            C         D                    
601     MT          6758    07-05-23            
601     MT          6758    14-05-23                   
601     MT          6758    21-05-23                   
601     MT          6758    28-05-23               
601     MT          6758    28-05-23                
601     MT          6758    04-06-23            

期望输出

A    B        C       D          E 
601  MT    6758    07-05-23   MONTH 
601  MT    6758    14-05-23   MONTH 
601  MT    6758    21-05-23   MONTH
601  MT    6758    28-05-23   MONTH
601  MT    6758    28-05-23   MONTH
601  MT    6758    04-06-23   WEEK

解决方法

核心逻辑

在join基础上添加严格的日期区间判断和兼容空值的A列关联规则,避免笛卡尔积导致的多余匹配行。

SQL实现示例

先将字符串格式日期转为可比较的日期类型,再执行匹配:

SELECT 
    t2.A,
    t2.B,
    t2.C,
    t2.D,
    t1.G AS E
FROM 表2 t2
JOIN 表1 t1 
    ON (t2.A = t1.A OR (t2.A IS NULL AND t1.A IS NULL))
    AND STR_TO_DATE(t2.D, '%d-%m-%y') BETWEEN STR_TO_DATE(t1.D, '%d-%m-%y') AND STR_TO_DATE(t1.E, '%d-%m-%y');

逻辑说明

  1. A列关联:通过OR语句兼容A列空值场景,确保空值也能正确匹配
  2. 日期校验:转换日期格式后用BETWEEN判断是否在区间内,避免字符串对比的逻辑错误
  3. 过滤无效匹配:双重条件同时生效,直接排除不符合规则的组合,解决之前join产生的错误结果问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:32:13