Oracle 11 SQL实现:从指定日期起查找首个Value非0的生效日期对应结果
Oracle 11g 实现向后查找首个非0汇总值SQL方案
实现逻辑
- 先筛选符合条件(指定entity_id、生效日期≥起始查询日期)的表关联数据
- 按生效日期分组计算每日value汇总值,过滤汇总结果为0的记录
- 对剩余记录按生效日期升序排序,取第一条的汇总值即为所需结果
最终SQL代码
SELECT SUM_VALUE FROM ( SELECT SUM(pd.VALUE) AS SUM_VALUE, p.effective_date FROM TblA p INNER JOIN TblADetail pd ON p.id = pd.id WHERE TRIM(p.entity_id) = 123 AND p.effective_date >= TO_DATE('03/10/2021', 'MM/DD/YYYY') GROUP BY p.effective_date HAVING SUM(pd.VALUE) != 0 ORDER BY p.effective_date ASC ) WHERE ROWNUM = 1;
补充说明
- 该写法完全兼容Oracle 11g版本,未使用12c及以上才支持的FETCH相关语法
- 如果需要兼容所有后续日期汇总均为0的场景,可在外层加
NVL函数返回自定义默认值,示例:SELECT NVL(SUM_VALUE, 0) AS SUM_VALUE FROM (...) - 原样例数据执行该SQL时,3月10日汇总值为0会被
HAVING条件过滤,剩下3月11日、3月12日的非0汇总值,按日期升序排序后取第一条即返回2000,符合需求。
内容的提问来源于stack exchange,提问作者faujong
相关产品推荐
相关产品推荐

