powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Переборка последующих строк с условием
7 сообщений из 7, страница 1 из 1
Переборка последующих строк с условием
    #39896887
Никита А
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Имеется таблица простоев автомобилей
...
Рейтинг: 0 / 0
Переборка последующих строк с условием
    #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
Переборка последующих строк с условием
    #39896890
Никита А
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге, должно получится так
...
Рейтинг: 0 / 0
Переборка последующих строк с условием
    #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
Переборка последующих строк с условием
    #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
Переборка последующих строк с условием
    #39897114
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть по сути это задача на объединение интервалов?
...
Рейтинг: 0 / 0
Переборка последующих строк с условием
    #39897367
Никита А
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alibek B.,

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


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