Oracle SQL 查找行交叉限制

Oracle SQL find row crossing limit

我有一个 table,它有如下四列

  1. ID。
  2. SUB_ID。一个ID会有多个SUB_IDs
  3. 收入
  4. 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 ## .在这个例子中

  1. 对于 ID 100 限制被 SUB ID 2 (10+12) 越过。所以总薪水 是 17 (8+9)
  2. 对于 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);