Oracle查询如果一条记录的某一列与上一条记录不一样,则计数加1要如何实现
oracle数据库中我有一个表为col1col211121221111322想要查询出结果为col1num1322大概需求是按col1分组col2依次遍历,如第二条col...
oracle数据库中
我有一个表 为 col1 col2
1 1
1 2
1 2
2 1
1 1
1 3
2 2
想要查询出结果为 col1 num
1 3
2 2
大概需求是按col1 分组 col2依次遍历,如第二条col2 为2 与第一条的1不一样,则计数加1 第三条与第二条都为2 则计数不变 col为1的第四条为col2为1 与第三条不一致 与col为1的第三条不一样,计数又+1 这样的需求我现在是放在程序中用代码遍历实现,但是在一条100万条数据中效率很慢,想在数据库中有没有办法实现?
要的结果应该是 col1 num
1 4
2 2 展开
我有一个表 为 col1 col2
1 1
1 2
1 2
2 1
1 1
1 3
2 2
想要查询出结果为 col1 num
1 3
2 2
大概需求是按col1 分组 col2依次遍历,如第二条col2 为2 与第一条的1不一样,则计数加1 第三条与第二条都为2 则计数不变 col为1的第四条为col2为1 与第三条不一致 与col为1的第三条不一样,计数又+1 这样的需求我现在是放在程序中用代码遍历实现,但是在一条100万条数据中效率很慢,想在数据库中有没有办法实现?
要的结果应该是 col1 num
1 4
2 2 展开
1个回答
展开全部
做了个简单测试以你上边的数据
建表
create table test
(col1 int,
col2 int);
insert into test values (1,1);
insert into test values (1,2);
insert into test values (1,2);
insert into test values (2,1);
insert into test values (1,1);
insert into test values (1,3);
insert into test values (2,2);
运行
with t as
(select s.col1,s.col2,row_number() over (partition by col1 order by rn) rn
from
(select col1,col2,rownum rn from test) s)
select a.col1,count(*)+1 from t a,t b where a.col1=b.col1 and a.col2<>b.col2 and a.rn=b.rn+1
group by a.col1
结果截图
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |