DB2:能否不使用MAX聚合函数改写查询以获取最大值?
不用聚合函数获取指定Id的最高value记录
当然可以不用聚合函数改写,这里提供两种常见的实现方式,效果和原查询一致:
方法一:使用NOT EXISTS子查询
SELECT * FROM A WHERE Id = 123 AND NOT EXISTS ( SELECT 1 FROM A AS innerA WHERE innerA.Id = 123 AND innerA.value > A.value )
逻辑说明:筛选出Id=123的记录,并且确保不存在同Id下value比当前记录更大的条目,这样剩下的就是该Id下value最大的记录。
方法二:使用自连接+空值筛选
SELECT a.* FROM A a LEFT JOIN A b ON a.Id = b.Id AND b.value > a.value WHERE a.Id = 123 AND b.Id IS NULL
逻辑说明:通过左连接同表中Id相同但value更大的记录,最终筛选出无法匹配到更大value的记录(即b.Id为NULL的条目),这些就是目标结果。
内容的提问来源于stack exchange,提问作者DB2fan
相关产品推荐
相关产品推荐

