oracle连续时间合并,Oracle 合并连续时间段

给出几个时间点,合并连续的时间点。

例如:

09:00-10:00,10:00-12:00,12:00-16:00  合并输出为09:00-16:00

09:00-10:00,10:00-12:00,12:00-16:00 ,17:00-18:00 输出为09:00-16:00 ,17:00-18:00

09:00-10:00,10:00-12:00,12:00-16:00 ,17:00-18:00,18:00-20:00  输出为 09:00-16:00 ,17:00-20:00

如下是使用lag,lead函数实现:

lag(column,N,defValue):取上一条记录

参数:column 取某列的值

N  取几条,默认取1条

defValue:如果没有取到值,返回该默认值。【比如取第一条的上一条,是取不到值的,如果给了该参数,则返回

该值,否则为null】

lead(column,N,defValue):取下一条记录

SQL语句如下:

select start_time,lead(priv,1,end_time) over(order by start_time) end_time from (

select start_time,end_time,(start_time-lag(end_time,1,1)over(order by start_time)) diff,

lag(end_time,1,1)over(order by end_time) priv

from (

select replace(substr(a,1,instr(a,'-',1,1)-1),':','') star

你可能感兴趣的:(oracle连续时间合并)