借据表
要求
现在希望查询出同一借据号下多笔期数是否值连续为’是’的数量,譬如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