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
相关产品推荐
相关产品推荐

