连续数据,顺序编号

好久没有写博客了, 今天需要一个特殊的案例, 简单纪念

  简单上图 说明需求,  

图1 种如果数据连续,则根据开头标记顺序。  

这种需求一般  更具上一条数据状态判断下一条数据,  打上标记后, 然后对应各个标记分组,  最后合并排序。  合并时候注意数据的原始顺序即可, 我开始写的时候,没有注意, 特别提醒一下自己 

 没啥好说的上SQL:

 with taba as(
 select 'AB' a   from dual
 union all
 select  'AC' a  from dual
  union all
 select  'AC' a   from dual
  union all
 select  'AC' a   from dual
  union all
 select  'AC' a   from dual
  union all
 select  'AC' a  from dual
  union all
  select 'AB' a  from dual
    union all
  select 'AB' a  from dual
    union all
  select 'AB' a  from dual
    union all
 select  'AC' a  from dual
  union all
  select 'AB' a  from dual
    union all
 select  'AC' a  from dual
  union all
  select 'AB' a  from dual
    union all
 select  'AC' a  from dual
  union all
  select 'AB' a  from dual
), tabb as(  select a, rownum ro  from  taba)
,tabc as( select a,  ro,  lag(a) over(order by ro) a1   from  tabb)
,tabd as(
select a, ro,   sum(case when (a1 is null or  a1!=a)  then 1 else  0  end) over(order by ro) a2 from  tabc
)select  a, row_number() over(partition by  a,a2 order by ro) numbe  from  tabd order by ro;

 

猜你喜欢

转载自blog.csdn.net/daiqiulong2/article/details/60138111