问题描述
我有一张如下所示的表格:
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 |
有人能指出我正确的方向吗?
解决方法
您需要使用 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