我有此数据:
row_id type value
1 a 1
2 a 2
3 a 3
4 a 5 --note that type a, value 4 is missing
5 a 6
6 a 7
7 b 1
8 b 2
9 b 3
10 b 4
11 b 5 --note that type b is missing no values from 1 to 5
12 c 1
13 c 3 --note that type c, value 2 is missing
我想为每个中的每个连续“运行”找到最小值和最大值type
。那就是我要回来
row_id type group_num min_value max_value
1 a 1 1 3
2 a 2 5 7
3 b 1 1 5
4 c 1 1 1
5 c 2 3 3
我是一个经验丰富的SQL用户,但是我从未解决过此问题。很显然,我知道如何让整体的最小值和最大值为每个type
使用GROUP
,MIN
以及MAX
,但我真的在这些地方最小值和最大值的损失。在其他问题上我没有发现任何可以回答我问题的东西。
我将PLSQL Developer与Oracle 11g一起使用。谢谢!
这是一个孤岛问题。您可以使用分析功能effect / trick来找到每种类型的连续值链:
select type,
min(value) as min_value,
max(value) as max_value
from (
select type, value,
dense_rank() over (partition by type order by value)
- dense_rank() over (partition by null order by value) as chain
from your_table
)
group by type, chain
order by type, min(value);
内部查询使用类型和整个结果集中的值的排名之间的差异来创建“链”号。外部查询仅将其用于分组。
SQL Fiddle包括内部查询的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句