如何通过SQL查询获取Event表中符合条件的Entity最小Value?
问题解答
完全可以通过SQL查询实现该需求,以下是最优的实现方式:
核心思路
- 先计算出
Status = 5时的最大Value,记为status5_max_val - 筛选出所有
Value > status5_max_val的记录,从中找到最小的Value - 使用
COALESCE函数处理“无满足条件的Value”的情况,此时返回status5_max_val
具体SQL实现
WITH status5_max AS ( SELECT MAX(Value) AS max_val FROM Event WHERE Status = 5 ) SELECT COALESCE( (SELECT MIN(Value) FROM Event WHERE Value > (SELECT max_val FROM status5_max)), (SELECT max_val FROM status5_max) ) AS result;
写法说明
- 使用CTE(公共表表达式)
status5_max提前计算Status=5的最大Value,避免重复子查询,提升可读性和性能 COALESCE函数会依次返回第一个非空的结果:如果存在大于status5_max_val的Value,就返回这些值中的最小值;否则直接返回status5_max_val- 该写法仅扫描表两次(一次计算最大值,一次筛选最小值),在大多数数据库中都能高效执行,且逻辑清晰易懂
内容的提问来源于stack exchange,提问作者Sakthivel Natarajan
相关产品推荐
相关产品推荐

