Teradata两表左连接实现取Table2最新记录(NULL优先或最大日期)
Teradata左连接匹配客户最新有效期记录实现方案
核心实现逻辑
- 匹配优先级:valid_end为NULL的当前有效记录优先级最高,无符合记录时取valid_end最大值的历史记录
- 分组排序:按client_id分组,自定义排序规则将高优先级记录排在组内首位
- 结果过滤:通过QUALIFY语句取每组第一条匹配记录,保留左连接特性,不会丢失Table1中存在的客户
实现代码
SELECT t1.client_id, t2.valid_end FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.client_id = t2.client_id QUALIFY ROW_NUMBER() OVER ( PARTITION BY t1.client_id ORDER BY -- 标记当前有效记录为最高优先级 CASE WHEN t2.valid_end IS NULL THEN 1 ELSE 2 END ASC, -- 非当前有效记录按有效期倒序,取最新的 t2.valid_end DESC ) = 1;
常见问题说明
直接使用MAX()函数匹配会不符合预期的原因:Teradata中MAX()聚合会自动忽略NULL值,无法识别并优先返回代表当前有效的NULL记录,因此需要通过自定义排序的窗口函数实现优先级匹配。
内容的提问来源于stack exchange,提问作者hro1979
相关产品推荐
相关产品推荐

