Похоже, вам нужно использовать рекурсивный факторинг подзапросов:
with rcte (id, IncommingDate, ProcessingTime, ProcessingStart, ProcessingEnd) as (
select id,
IncommingDate,
ProcessingTime,
IncommingDate,
IncommingDate + (ProcessingTime/86400)
from example
where id = 1
union all
select e.id,
e.IncommingDate,
e.ProcessingTime,
greatest(e.IncommingDate, r.ProcessingEnd),
greatest(e.IncommingDate, r.ProcessingEnd) + (e.ProcessingTime/86400)
from rcte r
-- assumes IDs are the ordering criteris and are contiguous
join example e on e.id = r.id + 1
)
select * from rcte;
ID INCOMMINGDATE PROCESSINGTIME PROCESSINGSTART PROCESSINGEND
---------- ------------------- -------------- ------------------- -------------------
1 2018-01-01 00:00:00 60 2018-01-01 00:00:00 2018-01-01 00:01:00
2 2018-01-01 00:05:00 60 2018-01-01 00:05:00 2018-01-01 00:06:00
3 2018-01-01 00:05:30 60 2018-01-01 00:06:00 2018-01-01 00:07:00
4 2018-01-01 00:10:00 60 2018-01-01 00:10:00 2018-01-01 00:11:00
Якорным членом является ID 1, и он может выполнить простой расчет для этого первого шага, чтобы получить время начала / окончания.
Затем рекурсивный элемент находит следующую исходную строку и использует greatest()
, чтобы решить, следует ли выполнять свои вычисления на основе его времени поступления или предыдущего времени окончания.
Это предполагает, что порядок основанна идентификаторах, и что они смежные.Если это не то, как вы на самом деле делаете заказ, тогда это немного сложнее.