|
这个问题我以前研究过, 用两次分析函数能实现, 跟前面的一个思路是一样的:
with tmp(t_date,data1 )as
(
select '2023-08-01',40 from dual union all
select '2023-08-02',40 from dual union all
select '2023-08-03',40 from dual union all
select '2023-08-04',10 from dual union all
select '2023-08-05',10 from dual union all
select '2023-08-06',40 from dual union all
select '2023-08-07',40 from dual union all
select '2023-08-08',30 from dual union all
select '2023-08-09',30 from dual union all
select '2023-08-10',30 from dual
),
mid1 as
(select a.*,lag(data1) over (order by t_date) as lag_data1
from tmp a
),
mid2 as
(select a.*
,case when data1=lag_data1 then 0
else 1 end as grp_flag
from mid1 a
)
select a.*,sum(grp_flag) over (order by t_date,data1) as final_grp_no
from mid2 a
;
|
|