Select 行基于 Oracle 中的分组滚动总和条件 SQL
Select rows based on grouped rolling sum condition in Oracle SQL
我有一个 table 如下所示:
ID
RID
Count
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
Count
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
的累积总和,然后 select 累积计数小于或等于 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
我有一个 table 如下所示:
ID | RID | Count |
---|---|---|
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 | Count | 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
的累积总和,然后 select 累积计数小于或等于 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