我正在尝试不使用光标进行特定的分组/计数。 我知道用游标可以做到这一点,但我正努力避免这种情况。 我的桌子看起来像这样:
totalInsideCircle
结果应该是
ID | Amount
1 | 1200
2 | 1200
3 | 2500
5 | 1200
6 | 1200
7 | 1200
8 | 2500
答案 0 :(得分:0)
基本上,这是一个差距和孤岛的情况。
ItemList
表中TEST
CTE使用INTER
分析函数选择上一个行的AMOUNT
值LAG
CTE创建组(使用INTER2
分析功能)SUM
列)对每个数量的行进行计数。我包括GRP
,只是为了设置正确的顺序。您可以将其删除。。
MIN(RN)
答案 1 :(得分:0)
这是一个孤岛问题。我将使用行号的不同来解决此版本:
select amount, count(*)
from (select t.*,
row_number() over (order by id) as seqnum,
row_number() over (partition by amount order by id) as seqnum_a
from t
) t
group by amount, (seqnum - seqnum_a);
为什么这种效果通常在您第一次看到时并不明显。目的是为相邻元素分配相同数量的组。
如果凝视子查询的结果,您将看到当数量相同且相邻时,这两个序列之间的差异是如何恒定的。剩下的只是聚合。
如果您知道id
之间没有空隙,那么可以使用id
代替seqnum
。