Oracle SQL中根据分组滚动求和条件选择行

问题描述

我有一张如下所示的表格:

ID RID 计数
1 1 1
2 1 3
3 1 5
4 1 1
5 2 1
6 2 6
7 2 3
8 2 2
9 2 4

我正在尝试检索每个 RID 的行,直到 Count 的滚动总和≤ 10。

在此示例中,我需要 RID = 1 的所有行,而仅需要 RID = 2 的第 1、2 和 3 行。

预期答案:

ID RID 计数 Sum_Count
1 1 1 NULL
2 1 3 4
3 1 5 9
4 1 1 10
5 2 1 NULL
6 2 6 7
7 2 3 10

我尝试了 ROWNUM内部查询等,但没有任何效果

有人能指出我正确的方向吗?

解决方法

您需要使用 Count 乘以 RID 的累积总和,然后选择累积计数小于或等于 10 的所有行。

试试这个:

select
    *
from
    (
        select
            ID,RID,COUNT,sum(COUNT) over (partition by RID order by ID) as cum_count
        from
            my_table
    )
where
    cum_count <= 10