Oracle SQL:基于行的重新启动序列

Oracle SQL:基于行的重新启动序列,sql,oracle,sequence,gaps-and-islands,Sql,Oracle,Sequence,Gaps And Islands,我的数据集如下所示: **series** start continue continue end start continue end 我需要添加一列,其中包含一个序列(“leeftijd_seq”),该序列从“开始”开始,在“继续”处递增1,在“结束”处结束。我尝试了下面的代码,但是我的execute语句对于我创建的序列不起作用 SELECT batchnr, series, CASE WHEN series = 'start' THEN execute 'alter sequence

我的数据集如下所示:

**series**
start
continue
continue
end
start
continue
end
我需要添加一列,其中包含一个序列(“leeftijd_seq”),该序列从“开始”开始,在“继续”处递增1,在“结束”处结束。我尝试了下面的代码,但是我的execute语句对于我创建的序列不起作用

SELECT batchnr, series,
  CASE WHEN series = 'start' THEN execute 'alter sequence leeftijd_seq restart start with 1;' and leeftijd_seq.nextval
    when series = 'continue' then leeftijd_seq.nextval
    ELSE leeftijd_seq.currval
    END SEQ_NO
FROM data order by batchnr asc

这看起来像是一个缺口和孤岛问题。我建议使用“开始”窗口计数来建立组:

select t.*,
    row_number() over(partition by grp order by batchnr) as seq_no
from (
    select t.*,
        sum(case when series = 'start' then 1 else 0 end) over(order by batchnr) as grp
    from mytable t
) t
如果有一个“结束”后面没有“开始”,而是有一个“继续”怎么办?例如,您想要哪种行为?