Может кто-то помочь с идеями, реализующих требования, описанные ниже:Oracle SQL-запрос Logic - Группа по по дате Разница
Таблица выше (на скриншоте) сохраняет историю задания запланированных процессов.
Мое требование состоит в том, чтобы таблица целей сохраняла общую историю, как показано ниже.
см ниже источника/целевой структуры таблицы и примеры исходного кода записей SQL:
CREATE TABLE "XHQ"."SHIFT_LOG" ("SEQUENCE_ID" NUMBER(10,0),
"JOB_ID" NUMBER(10,0),
"START_TS" DATE,
"END_TS" DATE,
"MINIMUM_VALUE" FLOAT(126),
"MAXIMUM_VALUE" FLOAT(126),
"AVERAGE_VALUE" FLOAT(126),
"USERID" NVARCHAR2(80));
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10908,12000,to_date('01-MAY-15','DD-MON-RR'),null,null,null,null,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10825,12000,to_date('29-APR-15','DD-MON-RR'),to_date('01-MAY-15','DD-MON-RR'),null,null,null,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10800,12000,to_date('29-APR-15','DD-MON-RR'),to_date('29-APR-15','DD-MON-RR'),5,10,7.5,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10725,10500,to_date('28-APR-15','DD-MON-RR'),to_date('29-APR-15','DD-MON-RR'),4,8,6,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10625,10500,to_date('27-APR-15','DD-MON-RR'),to_date('27-APR-15','DD-MON-RR'),6,6,6,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10620,10500,to_date('23-APR-15','DD-MON-RR'),to_date('27-APR-15','DD-MON-RR'),null,null,null,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10525,10500,to_date('22-APR-15','DD-MON-RR'),to_date('23-APR-15','DD-MON-RR'),null,null,null,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10510,10500,to_date('18-APR-15','DD-MON-RR'),to_date('20-APR-15','DD-MON-RR'),8,16,8,'admin');
Позвольте мне дать обзор требований.
Рассмотрим JobID = 10500
По sequenceid: 10510, он начал в 18-АПР и побежал по 20-АПР. После его успешного завершения он получает значение min, max, avg, соответствующее ему как сводка.
Однако, если мы рассмотрим последовательность id: 10525, она началась с 22-го апреля и продолжалась до 23 апреля. Однако из-за некоторого отключения сети он остановился в середине в течение нескольких минут и снова начал работу. Из-за этого он имеет значение min, max, avg как NULL, так как задание неполное. Снова у него была другая проблема с сетью на 27-м апреля, так что она была остановлена и снова возобновлена. Наконец, 27-го апреля (идентификатор последовательности: 10625) он завершился успешно, и ему присвоено значение min, max, avg.
В этом случае записи записей, принадлежащих к 10625, 10620 и 10525 потребностей последовательности идентификаторов следует рассматривать как одну группу и start_ts из последовательности идентификаторов 10525 необходимо получить назначен sequenceid 10625, как показано ниже
Одно исключение выше случае, если end_ts равно нулю (последовательность ID: 10908) (это означает, в настоящее время активную работу).
Здесь группировка должна быть с последовательностью ID: 10825 и выход должен быть как ниже скриншоте.
Позвольте мне знать, если вам требуется каких-либо разъяснений.
Заранее благодарим за ваше время и ценные предложения.
Не могли бы вы сказать, порядок выполнения логических операторов в том, где, как это его 1) '(MINIMUM_VALUE IS NOT NULL ИЛИ new_seq_id IS NULL) И end_ts IS NULL' или это похоже на 2) 'minimum_value NOT NOT NULL OR (new_seq_id IS NULL AND end_ts IS NULL)'. Я имею в виду, что оценивается первым. –
@sql_dummy Стандарт SQL не определяет порядок оценки условия 'x OR y AND z', в отличие от, например, Java, C++. База данных свободна в выборе любого порядка оценки, это лучше. SQL - это декларативный язык. Меня не интересует порядок оценки, я только объявляю: «Дайте мне строки, для которых условие« x OR y AND z »истинно» – krokodilko
, но разве это не изменит результат? Предположим, что если 'x истинно, y является ложным, z является ложным' в' case1', где условие вернет false и в 'case2', где условие вернет true –