oracle 对某列连续的数据为一组,如何写SQL

以图中的rownum 字段为检查连续字段。
想查出来的数据为:
rownum 分组序号
3 1
5 2
6 2
7 2
14 3

真想不出方法,谢谢了。
不好意思,上面说的不应该是分组序号。应该是组序号。目的是取出当前表中有多少组连续数据,因为可能不是很标准的连续数据,单条也算一组,连续的为一组。以rownum 为检查连续字段。

求这个SQL怎么写!

with tmp as(
select 1001 as c1,'Mar-13' as c2,90000 as c3,70000 as c4,3 as "rownum" from dual union all
select 1001 as c1,'May-13' as c2,50000 as c3,10000 as c4,5 as "rownum" from dual union all
select 1001 as c1,'Jun-13' as c2,60000 as c3,10000 as c4,6 as "rownum" from dual union all
select 1001 as c1,'Jul-13' as c2,100000 as c3,40000 as c4,7 as "rownum" from dual union all
select 1002 as c1,'Jul-13' as c2,140000 as c3,90000 as c4,14 as "rownum" from dual
)
select d.c1,d.c2,d.c3,d.c4,d."rownum",c.rr from(
  select k,rownum rr from(
    select distinct (n-r) as k from(
      select "rownum" n,rownum as r from tmp
    ) a
  ) b
) c
inner join (select c1,c2,c3,c4,"rownum",rownum as r from tmp) d 
on c.k=d."rownum"-d.r;

 结果如下:

追问

太强了,大神能不能不用inner join,一条查询出来。

因为得到上面图中原表的数据,已经有一大串的SQL 了。不是在一张表中。


我用你的SQL套了一下,就成这样了。

追答

刚发现oracle有个dense_rank函数,可以很方便的实现你的要求:

select c1,c2,c3,c4,"rownum",dense_rank() over (order by "rownum"-rownum) rr from tmp;

这么一句就行了。

追问

太太谢谢了,你真的太强了。你要在北京,我请你吃饭。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-27
select rownum '组号' ,t.* from (…通过sql查询到的数据…) t
第2个回答  2013-08-27
用多少样的方式去看这个啦
第3个回答  2013-08-27
能解释清楚一点么?追问

已经补充,谢谢关注,希望能解答。

追答

还是不清楚。
这样吧,你列举些简单的数据。
1.表中的数据
2.想拿到什么样式的数据
这样好方便理解。

追问

我在EXCEL中列了一下,上面有图,请看一下!

相似回答