Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Переборка последующих строк с условием / 7 сообщений из 7, страница 1 из 1
02.12.2019, 07:18
    #39896887
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переборка последующих строк с условием
Здравствуйте! Имеется таблица простоев автомобилей
...
Рейтинг: 0 / 0
02.12.2019, 07:23
    #39896888
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переборка последующих строк с условием
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH IDLE AS (
SELECT 'OTHER' AS cat_idle, '02.12.19 10:00:00' AS time_beg, '02.12.19 10:03:00' AS time_end FROM dual union all
SELECT 'ППР'              , '02.12.19 10:03:00'            , '02.12.19 10:09:00'             FROM dual union all
SELECT 'OTHER'            , '02.12.19 10:09:00'            , '02.12.19 10:10:00'             FROM dual union all
SELECT 'ППР'              , '02.12.19 10:10:00'            , '02.12.19 10:15:00'             FROM dual union all
SELECT 'ППР'              , '02.12.19 10:15:00'            , '02.12.19 10:18:00'             FROM dual union all
SELECT 'OTHER'            , '02.12.19 10:18:00'            , '02.12.19 10:25:00'             FROM dual union all
SELECT 'ППР'              , '02.12.19 10:25:00'            , '02.12.19 10:31:00'             FROM dual union all
SELECT 'ПЕР'              , '02.12.19 10:31:00'            , '02.12.19 10:33:00'             FROM dual union all
SELECT 'ППР'              , '02.12.19 10:33:00'            , '02.12.19 10:37:00'             FROM dual union all
SELECT 'OTHER'            , '02.12.19 10:37:00'            , '02.12.19 10:39:00'             FROM dual 
)
SELECT IDLE.*  FROM IDLE


необходимо определить неоконченные простои, путём перебора последующих.
Простои прерывается только другим типом простоя кроме ПЕР.
...
Рейтинг: 0 / 0
02.12.2019, 07:56
    #39896890
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переборка последующих строк с условием
В итоге, должно получится так
...
Рейтинг: 0 / 0
02.12.2019, 10:44
    #39896942
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переборка последующих строк с условием
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
WITH IDLE AS (
SELECT 'OTHER' AS cat_idle, '02.12.19 10:00:00' AS time_beg, '02.12.19 10:03:00' AS time_end FROM dual union all
SELECT 'ППР'              , '02.12.19 10:03:00'            , '02.12.19 10:09:00'             FROM dual union all
SELECT 'OTHER'            , '02.12.19 10:09:00'            , '02.12.19 10:10:00'             FROM dual union all
SELECT 'ППР'              , '02.12.19 10:10:00'            , '02.12.19 10:15:00'             FROM dual union all
SELECT 'ППР'              , '02.12.19 10:15:00'            , '02.12.19 10:18:00'             FROM dual union all
SELECT 'OTHER'            , '02.12.19 10:18:00'            , '02.12.19 10:25:00'             FROM dual union all
SELECT 'ППР'              , '02.12.19 10:25:00'            , '02.12.19 10:31:00'             FROM dual union all
SELECT 'ПЕР'              , '02.12.19 10:31:00'            , '02.12.19 10:33:00'             FROM dual union all
SELECT 'ППР'              , '02.12.19 10:33:00'            , '02.12.19 10:37:00'             FROM dual union all
SELECT 'OTHER'            , '02.12.19 10:37:00'            , '02.12.19 10:39:00'             FROM dual
)
SELECT IDLE.*
     , CASE WHEN LEAD(cat_idle,1) OVER(ORDER BY time_beg) IN ('ППР','ПЕР') 
                THEN CASE WHEN LEAD(cat_idle,2) OVER(ORDER BY time_beg) IN ('ППР','ПЕР') 
                              THEN LEAD(TIME_END,2) OVER(ORDER BY time_beg) 
                          ELSE LEAD(TIME_END,1) OVER(ORDER BY time_beg) END 
            ELSE time_end END AS time_beg_res
  FROM IDLE

-= Результат =-
cat_idle    time_beg                time_end             time_beg_res
OTHER	02.12.19 10:00:00	02.12.19 10:03:00	02.12.19 10:09:00
ППР	02.12.19 10:03:00	02.12.19 10:09:00	02.12.19 10:09:00
OTHER	02.12.19 10:09:00	02.12.19 10:10:00	02.12.19 10:18:00
ППР	02.12.19 10:10:00	02.12.19 10:15:00	02.12.19 10:18:00
ППР	02.12.19 10:15:00	02.12.19 10:18:00	02.12.19 10:18:00
OTHER	02.12.19 10:18:00	02.12.19 10:25:00	02.12.19 10:33:00
ППР	02.12.19 10:25:00	02.12.19 10:31:00	02.12.19 10:37:00
ПЕР	02.12.19 10:31:00	02.12.19 10:33:00	02.12.19 10:37:00
ППР	02.12.19 10:33:00	02.12.19 10:37:00	02.12.19 10:37:00
OTHER	02.12.19 10:37:00	02.12.19 10:39:00	02.12.19 10:39:00


Решение рабочее, но подход желает лучшего. Допустимы варианты, когда идёт подряд и по 7 одинаковых простоев.
Далее останется по такому же принципу поступить с начальной датой и сгруппировать позиции.
...
Рейтинг: 0 / 0
02.12.2019, 12:06
    #39896981
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переборка последующих строк с условием
Более подробное описание результата
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
-- Вот так выглядят исходные данные.               -- А так должен выглядеть результат

OTHER   02.12.19 10:00:00   02.12.19 10:03:00      OTHER    02.12.19 10:00:00   02.12.19 10:03:00
ППР     02.12.19 10:03:00   02.12.19 10:09:00      ППР      02.12.19 10:03:00   02.12.19 10:09:00
OTHER   02.12.19 10:09:00   02.12.19 10:10:00      OTHER    02.12.19 10:09:00   02.12.19 10:10:00
ППР     02.12.19 10:10:00   02.12.19 10:15:00      ППР      02.12.19 10:10:00   02.12.19 10:18:00
ППР     02.12.19 10:15:00   02.12.19 10:18:00   
OTHER   02.12.19 10:18:00   02.12.19 10:25:00      OTHER    02.12.19 10:18:00   02.12.19 10:25:00
ППР     02.12.19 10:25:00   02.12.19 10:31:00      ППР      02.12.19 10:25:00   02.12.19 10:37:00
ПЕР     02.12.19 10:31:00   02.12.19 10:33:00   
ППР     02.12.19 10:33:00   02.12.19 10:37:00   
OTHER   02.12.19 10:37:00   02.12.19 10:39:00      OTHER    02.12.19 10:37:00   02.12.19 10:39:00
...
Рейтинг: 0 / 0
02.12.2019, 15:43
    #39897114
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переборка последующих строк с условием
То есть по сути это задача на объединение интервалов?
...
Рейтинг: 0 / 0
03.12.2019, 03:55
    #39897367
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переборка последующих строк с условием
Alibek B.,

Получается так
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Переборка последующих строк с условием / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]