基于SQL Presto提取跨日期存在字段变更的客户行数据
Presto SQL实现:提取字段变更的客户记录
核心逻辑
通过关联两张表的Customer ID,对比同一客户在两天的Colour和Pricing type字段,筛选出至少一个字段发生变化的Table B记录。
基础版本(不处理NULL场景)
如果业务中不存在字段为NULL的情况,用以下SQL即可:
SELECT b.* FROM "Table B" b JOIN "Table A" a ON a."Customer ID" = b."Customer ID" WHERE a.Date = '01/01' AND b.Date = '02/01' AND (a.Colour != b.Colour OR a."Pricing type" != b."Pricing type");
增强版本(处理NULL场景)
如果字段可能出现NULL值,推荐使用Presto支持的IS DISTINCT FROM运算符,它能正确识别NULL与非NULL的差异:
SELECT b.* FROM "Table B" b JOIN "Table A" a ON a."Customer ID" = b."Customer ID" WHERE a.Date = '01/01' AND b.Date = '02/01' AND (a.Colour IS DISTINCT FROM b.Colour OR a."Pricing type" IS DISTINCT FROM b."Pricing type");
代码说明
JOIN通过Customer ID关联两张表,确保对比的是同一客户的两天数据WHERE子句限定两张表的日期,分别对应01/01和02/01的记录- 最后通过
OR条件筛选出至少一个目标字段发生变更的记录,最终返回Table B中的完整行数据
内容的提问来源于stack exchange,提问作者bobbytici
相关产品推荐
相关产品推荐

