Есть таблица с статусами и мне нужно рассчитать время работы по этим данным, например, таблица выглядит сложнее, но для простоты я ее упростил, оставив прежний смысл
create table statuses (
id number not null,
transfer date not null
);
Данные таблицы
id transfer equipment
1 03.08.2024 1
2 01.10.2024 2
3 03.10.2024 2
4 14.10.2024 3
with
statuses as (
select 1 as id, to_date('03.08.2024', 'dd.mm.yyyy') as transfer, 1 as equipment from dual
union all
select 2 as id, to_date('01.10.2024', 'dd.mm.yyyy') as transfer, 2 as equipment from dual
union all
select 3 as id, to_date('03.10.2024', 'dd.mm.yyyy') as transfer, 2 as equipment from dual
union all
select 4 as id, to_date('14.10.2024', 'dd.mm.yyyy') as transfer, 3 as equipment from dual
),
t_report as (
select t.id
,t.transfer as dt_start
,lead(t.transfer, 1, sysdate) over(partition by t.equipment order by t.transfer) as dt_end
,t.equipment
from statuses t
)
select t.equipment, t.dt_start, t.dt_end, round((t.dt_end - t.dt_start) * 24, 1) as hour
from t_report t
where t.dt_start between to_date('01.10.2024', 'dd.mm.yyyy') and to_date('14.10.2024', 'dd.mm.yyyy')
А вот в чем проблема:
статус transfer - это начала работы оборудования, время которого будет постоянно переходить на новые сутки, начиная
от 03.08.2024..04.08.2024..05.08.2024, без добавления записи в таблицу, вплоть до сегодняшнего дня,
т.е мне нужно как-то это хвост (id = 1) добавить в мой запрос to_date('01.10.2024') and to_date('14.10.2024')
и взять время не sysdate - 03.08.2024, а от to_date('01.10.2024') - to_date('14.10.2024')