关于Oracle根据累计值终止查询

8 篇文章 0 订阅

昨天有个朋友遇到一个问题:
单据根据创建时间倒序排序
累计单据金额等于或者超过1000时停止查询,返回查出来的数据

然后我提供了一个mysql的方式,但是他说他使用的是Oracle的数据库,尴尬!
Mysql的实现方法

模拟一个场景
通过序列号倒序排序
累计数字字段,当累计和大于等于100时停止查询

提供表数据如下:
在这里插入图片描述
这里通过over函数实现逐行累计;

SELECT
	T1.* 
FROM
	( SELECT ID, NUM, sum( NUM ) over ( ORDER BY "INDEX" DESC ) val, "INDEX" FROM "TEST_NUM" ) T1 
WHERE
	( T1.val - NUM ) < 100

查询结果如下:

在这里插入图片描述
这就完成了需求了。

但是上面的只有一种,如果多种呢?
这里要知道over的第二个参数分区partition BY

现在有多种类别的数据,分别实现上面的逻辑,数据库如下:
在这里插入图片描述
使用分区参数对TYPE分区,这次改成60

SELECT
	T1.* 
FROM
	( SELECT ID, NUM, "TYPE", sum( NUM ) over ( partition BY TYPE ORDER BY "INDEX" DESC ) val, "INDEX" FROM "TEST_NUM" ) T1 
WHERE
	( T1.val - NUM ) < 60

查询结果如下:
在这里插入图片描述
这样就完成了多种的分类处理了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值