仅选择一个序列

Selecting only a sequence

我想 select 在我的 table 中只有一部分在我阅读 00006 并在我阅读下一个模式 00XXX 时停止 selecting 。(这里是 00040 但它是可能是另一个数字 )

00006 
123456
456789
123789
00040
125478
547896
454623
519846
00001
....

这里,例如,我只想获得这些带有 select 的值:

123456 456789 123789

如何获得?我没有找到任何线索。

感谢您的帮助。

ps:我无权转换我 select

的 table

有了查尔斯的解决方案:

with marker as (
   select rownumber() over() as rowno
          , rrn(t) as recno, cast(substr(YYYYYY, 1, 5)as integer) as markvalue
   from fap1t010.£$ZZZZZZ t
   where substr(YYYYYY, 1, 5) like ('00___')
 ), dataa as (
   select rrn(t) as recno, cast(substr(YYYYYY, 1, 6)as integer) as datavalue
   from fap1t010.£$ZZZZZZ t
   where substr(YYYYYY, 1, 5) NOT like ('00006')
   and substr(YYYYYY, 13, 1) ='C'
), ranges as(
   select a.markvalue
         , a.recno as startrec
         , b.recno as endrec
   from marker A join marker B
     on b.rowno = a.rowno +1
)
 select distinct d.datavalue  
 from ranges R join dataa D
      on d.recno between r.startrec and r.endrec
 where r.markvalue = 00006

哇...这是一个丑陋的要求。

但可以做到:

with marker as (
   select rownumber() over() as rowno
          , rrn(t) as recno, myfld as markvalue
   from dtcwilt.temp t
   where myfld like ('00___ ')
 ), data as (
   select rrn(t) as recno, myfld as datavalue
   from dtcwilt.temp t
   where myfld NOT like ('00___ ')
), ranges as(
   select a.markvalue
         , a.recno as startrec
         , b.recno as endrec
   from marker A join marker B
     on b.rowno = a.rowno +1
)
 select d.datavalue  
 from ranges R join data D
      on d.recno between r.startrec and r.endrec
 where r.markvalue = '00006';

如果你有一个大数据集,性能就不会那么好;可能还有改进的余地。不过以上至少是通俗易懂的。

如果您碰巧使用的是最新版本的 IBM i 7.3,您可能可以通过使用新的 LEAD() and/or LAG() 函数来简化语句。但是我没有 7.3 可以测试。