Я хотел бы рассчитать время перекрытия для нескольких записей. Я пытаюсь сделать это, используя аналитическую оконную функцию, но теперь застрял.
Набор данных:
ID FY WK Group StartDate StartTime EndTime Category Dur Overlap
1 19 49 H-IS02 2019/06/03 22:35:00 23:25:00 MBA2 50 00:00:00
2 19 49 H-IS02 2019/06/04 09:40:00 09:55:00 MBD2 15 00:00:00
3 19 49 H-IS02 2019/06/04 10:30:00 10:55:00 MBD2 25 00:00:00
4 19 49 H-IS02 2019/06/04 13:50:00 14:30:00 MBD2 40 00:00:00
5 19 49 H-IS02 2019/06/04 14:05:00 15:15:00 MBD2 70 00:25:00
6 19 49 H-IS02 2019/06/04 19:30:00 01:20:00 MBA2 350 00:00:00
7 19 49 H-IS02 2019/06/06 08:45:00 09:30:00 MBD2 45 00:00:00
8 19 49 H-IS02 2019/06/06 17:30:00 21:40:00 MBA2 250 00:00:00
9 19 49 H-IS02 2019/06/06 19:30:00 20:10:00 MBA2 40 02:10:00
10 19 49 H-IS02 2019/06/07 00:00:00 01:20:00 MBA2 80 00:00:00
11 19 49 H-IS02 2019/06/07 08:30:00 09:20:00 MBD2 50 00:00:00
12 19 49 H-IS02 2019/06/07 09:20:00 16:20:00 MBD2 420 00:00:00
13 19 49 H-IS02 2019/06/07 13:30:00 13:46:00 MBD2 16 02:50:00
14 19 49 H-IS02 2019/06/07 16:06:00 16:20:00 MBD2 14 00:00:00
15 19 49 H-IS02 2019/06/07 17:45:00 23:00:00 MBA2 455 00:00:00
16 19 49 H-IS02 2019/06/07 20:30:00 21:20:00 MBA2 50 00:50:00
17 19 49 H-IS02 2019/06/07 22:30:00 22:45:00 MBA2 15 00:15:00
18 19 49 H-IS02 2019/06/07 23:00:00 23:15:00 MBA2 15 00:00:00
Я установил раздел (Group, StartDate, Category) и хочу рассчитать перекрытие EndTime к StartTime предыдущей записи, ЕСЛИ он принадлежит к тому же набору данных: StartDate, Group, Category.
Длительность (Dur) рассчитывается нормально, но мне также нужно знать перекрывающиеся минуты для записей в одном наборе данных. Запись 5 в приведенных выше данных имеет начальное время раньше, чем конечное время для записи 4, и она принадлежит тому же разделу.
Логика расчета c объяснено
I ' Буду признателен за любые рекомендации о том, как подойти к этому расчету.
Еще несколько подробностей задачи: данные для оборудования на заводе. Каждая запись содержит информацию о простоях. Я хочу рассчитать продолжительность, в течение которой машина перекрывала время простоя другой машины. Две машины могли быть выключены одновременно - с точным запуском и окончанием sh раз. Таким образом, если их время простоя составляло час, то у меня общее время простоя составляло 2 часа, а эффективное время простоя составляло всего 1 час. Вычисляя перекрытие времени простоя между машинами, я также могу определить ЭФФЕКТИВНОЕ ВРЕМЯ ВРЕМЕНИ как ВСЕГО ВРЕМЕНИ - ПЕРЕКРЫТИЕ
Сначала я подошел к этой проблеме, используя раздел, но не думаю, что это решит мою проблему. Проблема, которую я вижу, состоит в том, что у меня может быть, например, 4 записи, которые следует проверить на совпадение. Запись 2 является перекрытием записи 1. Запись 3 ничего не перекрывает и запись 4 перекрывает запись 1. Если смещение всегда было 1 или n записей, я мог бы использовать функцию LAG.
Мой текущий оператор SELECT ниже. И это не дает мне теплого чувства ... Это создает дополнительные записи в наборе результатов.
select DT.fiscalyear, DT.productionweek, DT.group, DT.plantsection, DT.startdate, DT.category,OL.endtime,OL.starttime,
dt.endtime,DT.starttime, dt.endtime - DT.starttime as Overlap
from (
select DT.fiscalyear, DT.productionweek, DT.group, DT.PlantSection, DT.StartDate, DT.starttime,dt.MaintenancePlant,
DT.EndDate, DT.endtime, DT.category, DT.breakdownduration
from Labs_Engineering.BV_MOR_Mining_AllDowntime DT) DT
join (
select TEST.startdate, PlantSection,category, max(endtime) endtime, max(starttime) starttime
from Labs_Engineering.BV_MOR_Mining_AllDowntime Test
where productionweek = 49 and fiscalyear = 19
and MaintenancePlant = 9804
and group = 'H-IS02'
and category like 'MBA2'
and (PlantSection ='P33' or PlantSection = 'P34')
group by PlantSection,category,startdate
--where DT.endtime <= Test.starttime
) OL
on DT.StartDate = OL.StartDate
and DT.PlantSection = OL.PlantSection
and DT.category = OL.category
where DT.starttime <= OL.endtime and ol.starttime > dt.starttime;