我试图在由不同标识符分组的表中找到没有特定值的数字范围。 如果我有一张这样的桌子:
ID | Type | Bad Value | Bad Value 2
4 | a | 0 | 0
5 | a | 0 | 0
6 | a | 0 | 0
7 | a | 0 | 1
8 | a | 1 | 0
9 | a | 0 | 0
2 | b | 0 | 0
3 | b | 0 | 0
4 | b | 1 | 0
5 | b | 1 | 1
6 | b | 0 | 0
7 | b | 0 | 0
6 | c | 0 | 0
7 | c | 0 | 1
8 | c | 1 | 0
9 | c | 0 | 0
我想得到这样的输出:
FROM | TO | Group
4 | 6 | a
9 | 9 | a
2 | 3 | b
6 | 7 | b
6 | 6 | c
9 | 9 | c
我找到了类似的解决方案here,但它们都没有在Oracle中运行。我得到一个错误表达式错误。 有办法去做吗?有问题的表格中有数十万个条目。
答案 0 :(得分:0)
您需要识别相同的组。有一个技巧,这是行数的差异。
select min(id) as fromid, max(id) as toid, type
from (select t.*,
(row_number() over (partition by type order by id) -
row_number() over (partition by type, badvalue order by id)
) as grp
from table t
) grp
where badvalue = 0
group by grp, type;
这里有一个细微差别,因为你似乎只想要排在哪里"糟糕的价值"注意,此条件位于外部选择中,因此它不会干扰row_number()
计算。