sql统计字段连续递增的次数
场景:表中某字段为整型,值为1,2,3,5,6,7,8,10等,现需要统计该字段值连续递增的次数,断号则从新开始,比如1-3为3,5-8为4,10为1。
原始数据:
id |
1 |
2 |
3 |
5 |
6 |
7 |
8 |
10 |
期望结果:
id | 连续次数 |
1-3 | 3 |
5-8 | 4 |
10 | 1 |
数据准备:
create table tb_num
(id int)
insert into tb_num values(1)
insert into tb_num values(2)
insert into tb_num values(3)
insert into tb_num values(5)
insert into tb_num values(6)
insert into tb_num values(7)
insert into tb_num values(8)
insert into tb_num values(10)
原理分析:需要统计连续递增的次数,我们首先想到的应该是group by ,但group by 是统计的相同值的次数,目前并不满足。
我们可以给每一行增加一个行号,行号每行增加1,id字段连续的话,也是增加1,id连续的话,其值减去对应行号,值应该是相等的,即可分组统计。
1、增加行号,并计算差值
select id,ROW_NUMBER() over(order by id asc) as num,
id-ROW_NUMBER() over(order by id asc) as diff
from tb_num

2、根据差值分组
select convert(varchar,MIN(id))+'-'+convert(varchar,MAX(id)) id,COUNT(*) 连续次数
from(
select id,ROW_NUMBER() over(order by id asc) as num,
id-ROW_NUMBER() over(order by id asc) as diff
from tb_num
) t
group by diff

根据此原理,可以统计网站用户的连续登陆天数等。
DkME
按照操作说明,程序可以运行,
非常不错,真的是帮大忙了呀,哈哈~~