#sql #oracle
#sql #Oracle
Вопрос:
У меня есть таблица, структура которой — Trn_Id , Trn_Start_Date , Division_Code, Station_Code, Actual_Date_Time, и мне нужно найти общую задержку поезда в минутах для конкретного подразделения Trn_Id amp; Trn_Start_Date.
например, здесь, в примере, приведенная задержка для Trn_Id 1001 amp; Tr_start_Date 20 августа в подразделении XYZ составляет 40 минут, в подразделении PAL — 70 минут, что составляет 110 минут, но если мы посмотрим на общую задержку поезда, это 03:30 — 01: 10 = 140 минут. Теперь отсутствует точка, когда разделение изменяется с XYZ на PAL, так что необходимо учитывать точку перехода, что даст дополнительные минуты ( 02: 20-01: 50 = 30 минут ), поэтому общая задержка поезда составляет 110 30 = 140 минут
Но я не знаю, в какой учетной записи подразделения я должен указать эту задержку, XYZ или PAL? Даже если мы можем случайным образом передать это любому подразделению, то как рассчитать общую задержку поезда с точки зрения разделения. Пожалуйста, укажите.
Комментарии:
1. И откуда вы знаете, что такое задержка?
2. Я думаю, что в вашем примере отсутствуют некоторые данные. В trn_start_date нет временного интервала, поэтому вы не можете видеть, каково запланированное время начала. Обратите внимание, что скриншоты для представления данных являются проблемой для тех, кто хочет ответить. Сценарий создания таблицы (текст, а не скриншот) и dml для пары примеров строк были бы очень полезны. Таким образом, мы можем быстро воспроизвести ваш вопрос в наших локальных средах.
Ответ №1:
Если вы ищете продолжительность для каждого деления, вы можете использовать lead()
и агрегирование:
select division_code, sum(next_adt - actual_date_time)
from (select t.*,
lead(actual_date_time) over (partition by trn_id, trn_start_date order by actual_date_time) as next_adt
from t
) t
group by division_code;
Это должно работать независимо от того, сколько разделений в данных.