DB2-SQL处理END字段null值:查询max(END)≤2021-12-31的ID对应记录
DB2 SQL查询实现方案
核心逻辑说明
- 空值处理:使用DB2内置的
COALESCE函数将END字段的null值替换为远大于阈值的'9999-12-31',只要对应id下存在未结束(END为null)的记录,计算出的最大日期就会远超2021-12-31,会被直接排除。 - 筛选逻辑:先按id分组计算每组的最大END日期,筛选出最大值≤
'2021-12-31'的合法id,再关联原表返回对应记录。
注意:如果
END字段为DATE类型,建议将替换值写为DATE('9999-12-31')显式转换为日期类型,避免隐式转换报错。
方案1:返回符合条件id的所有全量记录
SELECT t.* FROM my_date t INNER JOIN ( SELECT id FROM my_date GROUP BY id HAVING MAX(COALESCE(END, '9999-12-31')) <= '2021-12-31' ) valid_ids ON t.id = valid_ids.id
方案2:返回符合条件id的最大END对应的单条记录(与你给出的预期结果完全匹配)
SELECT t.* FROM my_date t INNER JOIN ( SELECT id, MAX(COALESCE(END, '9999-12-31')) AS max_end FROM my_date GROUP BY id HAVING MAX(COALESCE(END, '9999-12-31')) <= '2021-12-31' ) valid_ids ON t.id = valid_ids.id AND COALESCE(t.END, '9999-12-31') = valid_ids.max_end
内容的提问来源于stack exchange,提问作者Tick _Tack
相关产品推荐
相关产品推荐

