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-33
5-84
101

数据准备:

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

根据此原理,可以统计网站用户的连续登陆天数等。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注