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

PowerBI中如何按日期范围合并两张数据表?

解决方案:基于促销日期范围合并数据表

要实现将注册信息表与促销信息表按日期范围关联,且保留所有注册记录(非促销期的促销字段留空),可以通过**左连接(LEFT JOIN)**结合日期范围匹配来完成。以下是不同SQL数据库的具体实现代码:

核心逻辑

使用左连接保留enrollment表的全部记录,通过BETWEEN条件判断注册日期是否落在某促销活动的起止日期区间内,匹配成功则返回对应促销信息,否则促销字段为NULL。

MySQL 实现代码

SELECT 
    e.student_id,
    e.enrollment_date,
    p.promo_id,
    p.promotion,
    p.promo_start,
    p.promo_end
FROM enrollment e
LEFT JOIN promotion p 
    ON STR_TO_DATE(e.enrollment_date, '%m/%d/%Y') BETWEEN STR_TO_DATE(p.promo_start, '%m/%d/%Y') 
        AND STR_TO_DATE(p.promo_end, '%m/%d/%Y');

SQL Server 实现代码

SELECT 
    e.student_id,
    e.enrollment_date,
    p.promo_id,
    p.promotion,
    p.promo_start,
    p.promo_end
FROM enrollment e
LEFT JOIN promotion p 
    ON CONVERT(DATE, e.enrollment_date, 101) BETWEEN CONVERT(DATE, p.promo_start, 101) 
        AND CONVERT(DATE, p.promo_end, 101);

PostgreSQL 实现代码

SELECT 
    e.student_id,
    e.enrollment_date,
    p.promo_id,
    p.promotion,
    p.promo_start,
    p.promo_end
FROM enrollment e
LEFT JOIN promotion p 
    ON TO_DATE(e.enrollment_date, 'MM/DD/YYYY') BETWEEN TO_DATE(p.promo_start, 'MM/DD/YYYY') 
        AND TO_DATE(p.promo_end, 'MM/DD/YYYY');

注意事项

  • 如果你的数据表中日期字段已经是DATE类型(而非字符串),可以直接省略日期转换函数,直接使用e.enrollment_date BETWEEN p.promo_start AND p.promo_end作为关联条件。
  • 若同一注册日期匹配多个促销活动,结果会返回多条对应记录,可根据需求添加去重或筛选逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:45:32