假设没有间隙,则可以使用lead()
和lag()
-不进行聚合:
select activity, start_date,
coalesce(lead(start_date) over (order by start_date) - interval '1' second,
max_end_date
)
from (select t.*,
lag(activity) over (order by start_date) as prev_activity,
max(end_date) over () as max_end_date
from t
) t
where prev_activity is null or prev_activity <> activity;
注意:我认为将结束时间设置为午夜前一秒是一个非常糟糕的主意。我认为您的数据应使用日期(没有时间成分)来构成开始和结束时间。然后,比较将<
用于结束时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句