在SQL中计算连续序列的块

Eme*_*aga 2 sql oracle11g

让我们假设这种情况:

CAR     TIME
A       1300
A       1301
A       1302
A       1315
A       1316
A       1317
A       1319
A       1320
B       1321
B       1322
Run Code Online (Sandbox Code Playgroud)

我想生成另一列,列出每辆车的每次行程.每当我们在TIME上发生不连续时,我们都会考虑新的旅行.

CAR     TIME    TRIP
A       1300     1
A       1301     1
A       1302     1
A       1315     2
A       1316     2
A       1317     2
A       1319     3
A       1320     3
B       1321     1
B       1322     1
Run Code Online (Sandbox Code Playgroud)

是否有一些SQL函数来获取此计数?提前致谢.

Yog*_*rma 6

你似乎想要累积的方法:

select t.*, dense_rank() over (partition by car order by grp1) as trp
from (select t.*, sum(case when grp > 1 then 1 else 0 end) over (partition by car order by time) as grp1
      from (select t.*, coalesce((time - lag(time) over (partition by car order by time)), 1) as grp
            from table t
           ) t
     ) t;
Run Code Online (Sandbox Code Playgroud)