Oracle - 按间隔对值进行分组

use*_*190 7 sql oracle group-by lead

我需要查询一个包含步骤id +值的表.结果将列出间隔及其相关值.这里的间隔被定义为"连续的步骤ID,共享相同的数据值".

我很难用文字描述它,所以请看这个:

从这张桌子

  Step ! Data
  ------------
   1   !  A
   2   !  A
   3   !  A
   5   !  A
   6   !  B
  10   !  A
Run Code Online (Sandbox Code Playgroud)

我需要以下报告

  From ! To   ! Data
  -------------------
     1 !   3  !   A
     5 !   5  !   A
     6 ! null !   B
    10 ! null !   A
Run Code Online (Sandbox Code Playgroud)

我认为lead()会帮助我,但没有成功.

Dav*_*itz 1

select      min (step)                                                   as "from"
           ,nullif (max (step),max(min(step)) over (partition by data))  as "to"
           ,data

from       (select      step,data
                       ,row_number () over (partition by data order by step) as n

            from        t
            ) 

group by    data
           ,step - n            

order by    "from"           
Run Code Online (Sandbox Code Playgroud)