SQL统计连续值的个数

借据表

在这里插入图片描述

要求

现在希望查询出同一借据号下多笔期数是否值连续为’是’的数量,譬如1、2、3期为是,4、5、6期为否,那么连续为是的数量为3。
若1期为是,2期为否,3期为是,4期为否……,那么连续为是的数量则为0。

基础知识

lag是上一条记录。
lag(is_not)是上一条记录的is_not字段。

开始解决

下面的sql查询出了额外的一列is_continue,它表示当前行的is_not是否与上一行的is_not相同。

select id,code,num,is_not,
case 
when code  != lag(code) over (order by code,num) then 0
when is_not = lag(is_not) over (order by code,num) and is_not=1 then 1 
else 0 end as is_continue  from borrow  order by code,num 

查询结果
在这里插入图片描述
再对查询结果的is_continue求和即可

select code,sum(is_continue) as continue_num from (
select id,code,num,is_not,
case 
when code  != lag(code) over (order by code,num) then 0
when is_not = lag(is_not) over (order by code,num) and is_not=1 then 1 
else 0 end as is_continue  from borrow  order by code,num 
) as continue_table group by code

在这里插入图片描述

最终的结果

是0的continue_num不变,不是0的continue_num加1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值