Oracle SQL 查找行交叉限制
Oracle SQL find row crossing limit
我有一个 table,它有如下四列
- ID。
- SUB_ID。一个ID会有多个SUB_IDs
- 收入
- PAY,其中 Pay 的值始终小于或等于 Revenue
select * from Table A order by ID , SUB_ID
将有如下数据
ID SUB_ID REVENUE PAY
100 1 10 8
100 2 12 9
100 3 9 7
100 4 11 11
101 1 6 5
101 2 4 4
101 3 3 2
101 4 8 7
101 5 4 3
101 6 3 3
我有常数 LIMIT 值 20 。现在我需要找到 SUB_ID 其中 Revenue 在对每个 ID 使用 SUB_ID(递增顺序)进行连续 SUM 时超过 LIMIT,然后找到总 Pay ## .在这个例子中
- 对于 ID 100 限制被 SUB ID 2 (10+12) 越过。所以总薪水
是 17 (8+9)
- 对于 ID 101 限制被 SUB ID 4 越过
(6+4+3+8) 。所以总薪酬是 18 (5+4+2+7)
基本上我需要找到超过限制的行。
Fiddle: http://sqlfiddle.com/#!4/4f12a/4/0
with sub as
(select x.*,
sum(revenue) over(partition by id order by sub_id) as run_rev,
sum(pay) over(partition by id order by sub_id) as run_pay
from tbl x)
select *
from sub s
where s.run_rev = (select min(x.run_rev)
from sub x
where x.id = s.id
and x.run_rev > 20);
我有一个 table,它有如下四列
- ID。
- SUB_ID。一个ID会有多个SUB_IDs
- 收入
- PAY,其中 Pay 的值始终小于或等于 Revenue
select * from Table A order by ID , SUB_ID
将有如下数据
ID SUB_ID REVENUE PAY
100 1 10 8
100 2 12 9
100 3 9 7
100 4 11 11
101 1 6 5
101 2 4 4
101 3 3 2
101 4 8 7
101 5 4 3
101 6 3 3
我有常数 LIMIT 值 20 。现在我需要找到 SUB_ID 其中 Revenue 在对每个 ID 使用 SUB_ID(递增顺序)进行连续 SUM 时超过 LIMIT,然后找到总 Pay ## .在这个例子中
- 对于 ID 100 限制被 SUB ID 2 (10+12) 越过。所以总薪水 是 17 (8+9)
- 对于 ID 101 限制被 SUB ID 4 越过 (6+4+3+8) 。所以总薪酬是 18 (5+4+2+7)
基本上我需要找到超过限制的行。
Fiddle: http://sqlfiddle.com/#!4/4f12a/4/0
with sub as
(select x.*,
sum(revenue) over(partition by id order by sub_id) as run_rev,
sum(pay) over(partition by id order by sub_id) as run_pay
from tbl x)
select *
from sub s
where s.run_rev = (select min(x.run_rev)
from sub x
where x.id = s.id
and x.run_rev > 20);