|
递归
with t as (
select '2022-01-01' as dt, 1 as sign_in from dual union
select '2022-01-02' as dt, 1 as sign_in from dual union
select '2022-01-03' as dt, 1 as sign_in from dual union
select '2022-01-04' as dt, 0 as sign_in from dual union
select '2022-01-05' as dt, 1 as sign_in from dual union
select '2022-01-06' as dt, 0 as sign_in from dual union
select '2022-01-07' as dt, 1 as sign_in from dual union
select '2022-01-08' as dt, 1 as sign_in from dual union
select '2022-01-09' as dt, 1 as sign_in from dual union
select '2022-01-10' as dt, 1 as sign_in from dual union
select '2022-01-11' as dt, 1 as sign_in from dual union
select '2022-01-12' as dt, 1 as sign_in from dual union
select '2022-01-13' as dt, 0 as sign_in from dual union
select '2022-01-14' as dt, 0 as sign_in from dual union
select '2022-01-15' as dt, 1 as sign_in from dual union
select '2022-01-16' as dt, 1 as sign_in from dual union
select '2022-01-17' as dt, 1 as sign_in from dual union
select '2022-01-18' as dt, 1 as sign_in from dual
),
tmp as (
select dt, sign_in,row_number()over(order by dt) as rn from t ) ,
tmp1 (dt, sign_in,lxqd,rn) as
(select dt, sign_in ,sign_in as lxqd , rn from tmp
where rn=1
union all
select b.dt,b.sign_in, decode(b.sign_in,0,0, a.lxqd+1) as lxqd,b.rn from tmp1 a, tmp b
where a.rn+1=b.rn)
select * from tmp1 |
|