powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Контроль регламентного времени запросом (расписание)
25 сообщений из 35, страница 1 из 2
Контроль регламентного времени запросом (расписание)
    #39917271
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, подскажите, пжл с идеей или запросом.

Есть таблица files с 4 полями - id, type, time, parid
Id - это айди файла (строки)
Type -это тип файла - один из двух или Query или Answer
Time - время прихода звпроса или сформированного ответа
Parid - у файлов ответа проставляются соответсвующие id файлов запроса

Известно, что регламентное время формирования 1 файла ответа - 10 минут без учета очереди.
Ответы готовятся по очереди по времени поступления запросов

Нужно запросом выделить те файлы ответов, которые сформированы с нарушением срока.

Например, если в 11:00 одновременно поступило 3 файла запроса, то первый ответ должен быть до 11:10, второй-до 11:20, третий - до 11:30 и т.д.
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917288
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O)
Нужно запросом выделить те файлы ответов, которые сформированы с нарушением срока.
Не умеешь делать self-join и арифметикой дат и интервалов не владеешь?
(o-O)
Type -это тип файла - один из двух или Query или Answer
Не нужен. Достаточно Parid.
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917306
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно поподробней?)
Таблицу с собой же пересек, получил время для каждого ответа с момента времени файла запроса.
Контролирую его с произведением 10 минут на количество запросов полученных за последние 10 минуты для конкретного запроса.
Но дырка в том, что если какой то новый запрос пришел позже яем через 10 минут и к этому времени еще не все ответы сформировались..
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917315
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O)
Можно поподробней?)
Нельзя. Ибо недочитал.
Предоставь тестовые данные в удобной для использования форме. И желаемый результат на них.
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917345
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O),

Очередь в один момент времени может обрабатывать один файл?
Тогда начало обработки каждого файла либо время его прихода либо время завершения одного из предыдущих (если обработчик занят на премя прихода).
Соответственно для каждого файла ищешь ту строку когда он начал обрабатываться.

(o-O)
Например, если в 11:00 одновременно поступило 3 файла запроса, то первый ответ должен быть до 11:10, второй-до 11:20, третий - до 11:30 и т.д.
А если первый ответ пришел в 11:50, второй в 11:51, третий в 11:52? Второй и третий ОК?

(o-O)
Например, если в 11:00 одновременно поступило 3 файла запроса, то первый ответ должен быть до 11:10, второй-до 11:20, третий - до 11:30 и т.д.
Если пять файлов пришли в 10:50, и последний из них был обработан в 12:00, то для первого из поступивших в 11:00 допустимое время 12:10?
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917358
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кобанчег
(o-O)
Например, если в 11:00 одновременно поступило 3 файла запроса, то первый ответ должен быть до 11:10, второй-до 11:20, третий - до 11:30 и т.д.
А если первый ответ пришел в 11:50, второй в 11:51, третий в 11:52? Второй и третий ОК?
Суть задачи, как я её понимаю, в составлении регламента ответов на основании запросов, а для этого сами ответы не нужны (только если для упорядочивания одновременных запросов):
ЗапросРегаментный ответ11:0011:1011:0211:2011:0511:3011:2811:4011:4311:53
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917370
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Судя по примеру ТС учитывается время прихода, порядок прихода и соответственно загрузка очереди.
Вот только при проставлении "должен быть" у него не учтено время обработки предыдущих. Это странно.

В любом случае скорее всего решается однопроходной моделью, а взависимости от деталей может и аналитикой. :)
Но мы можем только гадать что именно требуется.
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917373
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот мой запрос

Косяк в том, что та строчка , которая выбирается , по смыслу не нарушение, т.к.там очередь из файлов и на каждый из них есть 10 минут.
Код: 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.
with files AS
(
select '1' as id, 'query_1' as name, TO_DATE('22.01.2020 11:00:00','DD.MM.YYYY hh24:mi:ss') dt, '7'  as par_id from dual union all
select '2' as id, 'query_2' as name, TO_DATE('22.01.2020 11:30:01','DD.MM.YYYY hh24:mi:ss'), '8'  as par_id from dual union all
select '3' as id, 'query_3' as name, TO_DATE('22.01.2020 11:30:02','DD.MM.YYYY hh24:mi:ss'), '9'  as par_id from dual union all
select '4' as id, 'query_4' as name, TO_DATE('22.01.2020 11:30:03','DD.MM.YYYY hh24:mi:ss'), '10'  as par_id from dual union all
select '5' as id, 'query_5' as name, TO_DATE('22.01.2020 11:30:04','DD.MM.YYYY hh24:mi:ss'), '11'  as par_id from dual union all
select '6' as id, 'query_6' as name, TO_DATE('22.01.2020 11:50:05','DD.MM.YYYY hh24:mi:ss'), '12'  as par_id from dual union all

select '7' as id, 'answer_1' as name, TO_DATE('22.01.2020 11:07:00','DD.MM.YYYY hh24:mi:ss'), null  as par_id from dual union all
select '8' as id, 'answer_2' as name, TO_DATE('22.01.2020 11:37:00','DD.MM.YYYY hh24:mi:ss'), null  as par_id from dual union all
select '9' as id, 'answer_3' as name, TO_DATE('22.01.2020 11:44:00','DD.MM.YYYY hh24:mi:ss'), null  as par_id from dual union all
select '10' as id, 'answer_4' as name, TO_DATE('22.01.2020 11:51:00','DD.MM.YYYY hh24:mi:ss'), null  as par_id from dual union all
select '11' as id, 'answer_5' as name, TO_DATE('22.01.2020 11:58:00','DD.MM.YYYY hh24:mi:ss'), null  as par_id from dual union all
select '12' as id, 'answer_6' as name, TO_DATE('22.01.2020 12:05:00','DD.MM.YYYY hh24:mi:ss'), null  as par_id from dual
)
SELECT *
FROM (
    SELECT a.id, a.name, a.dt answ_dt,q.dt query_dt,
           ROUND((a.dt - q.dt)*24*60) AS time_delta,--разница времен ответа и запроса
           10 * (SELECT count(*) FROM files b WHERE  b.name LIKE 'query%' AND b.dt BETWEEN q.dt-10/(24*60) AND q.dt) AS lim_value -- 10 минут * количество полученных неотвеченных запросов до текущего       
    FROM files q,
         files a
    WHERE q.name LIKE 'query%'
    AND a.name LIKE 'answer%'
    AND q.par_id = a.id   
)
WHERE time_delta > lim_value
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917377
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кобанчег
В любом случае скорее всего решается однопроходной моделью
Тут должен хорошо пригодиться match_recognize для разбиения на группы, когда была очередь.
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917391
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O),

Почему у тебя вопрос имеет ссылку на ответ, ответ появился раньше вопроса?
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917397
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После того, как сформировался ответ - у вопроса проставляется ссылка на его ответ.
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917409
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O),

признак наличия очереди, разрыв более 10 минут как здесь 22064462 или
еще нужно учитывать время реального ответа и брать худший их результатов.
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917422
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O),

Например, первый запрос 11:00 ответ в 11:03, регламентный ответ 11:10,
второй запрос 11:05, регламентный ответ 11:15 или 11:20,
если если реальный ответ на первый запрос поступил не в 11:03, а в 11:07,
то ответ на второй должен быть дан до 11:15, 11:17 или 11:20?
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917424
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O),

в 11:00 поступило 5 запросов, на все пять ответили за 35минут (все линии свободны)
в 11:40 приходит запрос, каков крайний срок ответа?

....
stax
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917434
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with files as
(
select '1' as id, 'query_1' as name, TO_DATE('22.01.2020 11:00:00','DD.MM.YYYY hh24:mi:ss') dt, '7'  as par_id from dual union all
select '2' as id, 'query_2' as name, TO_DATE('22.01.2020 11:30:01','DD.MM.YYYY hh24:mi:ss'), '8'  as par_id from dual union all
select '3' as id, 'query_3' as name, TO_DATE('22.01.2020 11:30:02','DD.MM.YYYY hh24:mi:ss'), '9'  as par_id from dual union all
select '4' as id, 'query_4' as name, TO_DATE('22.01.2020 11:30:03','DD.MM.YYYY hh24:mi:ss'), '10'  as par_id from dual union all
select '5' as id, 'query_5' as name, TO_DATE('22.01.2020 11:30:04','DD.MM.YYYY hh24:mi:ss'), '11'  as par_id from dual union all
select '6' as id, 'query_6' as name, TO_DATE('22.01.2020 11:50:05','DD.MM.YYYY hh24:mi:ss'), '12'  as par_id from dual
)
select * from files
  match_recognize
  ( order by dt
    measures
      strt.dt + count(*) * interval '10' minute as last_term
    all rows per match
    pattern (strt queue*)
    define
      queue as dt < strt.dt + count(queue.*) * interval '10' minute
  )
;

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
DT                LAST_TERM         I NAME    PA
----------------- ----------------- - ------- --
22.01.20 11:00:00 22.01.20 11:10:00 1 query_1 7
22.01.20 11:30:01 22.01.20 11:40:01 2 query_2 8
22.01.20 11:30:02 22.01.20 11:50:01 3 query_3 9
22.01.20 11:30:03 22.01.20 12:00:01 4 query_4 10
22.01.20 11:30:04 22.01.20 12:10:01 5 query_5 11
22.01.20 11:50:05 22.01.20 12:20:01 6 query_6 12
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917442
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

11:50 так как к времени этого запроса все предыдущие заппрсы и ответы уже сформированы
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917443
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Сппчибо! Интересное решение, похоже на правду!! Буду пробовать)
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917469
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O)
Elic,

Сппчибо! Интересное решение, похоже на правду!! Буду пробовать)

7 и 11 просрочка?


Код: 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.
with files as
(
select 'Q' Type ,'1' as id, 'query_1' as name, TO_DATE('22.01.2020 11:00:00','DD.MM.YYYY hh24:mi:ss') dt, '61'  as par_id from dual union all
select 'Q','2' as id, 'query_2' as name, TO_DATE('22.01.2020 11:00:01','DD.MM.YYYY hh24:mi:ss'), '62'  as par_id from dual union all
select 'Q','3' as id, 'query_3' as name, TO_DATE('22.01.2020 11:00:02','DD.MM.YYYY hh24:mi:ss'), '63'  as par_id from dual union all
select 'Q','4' as id, 'query_4' as name, TO_DATE('22.01.2020 11:00:03','DD.MM.YYYY hh24:mi:ss'), '64'  as par_id from dual union all
select 'Q','5' as id, 'query_5' as name, TO_DATE('22.01.2020 11:00:04','DD.MM.YYYY hh24:mi:ss'), '65'  as par_id from dual union all
select 'A','61' as id, 'a_1' as name, TO_DATE('22.01.2020 11:05:05','DD.MM.YYYY hh24:mi:ss'), ''  as par_id from dual union all
select 'A','62' as id, 'a_2' as name, TO_DATE('22.01.2020 11:15:05','DD.MM.YYYY hh24:mi:ss'), ''  as par_id from dual union all
select 'A','63' as id, 'a_3' as name, TO_DATE('22.01.2020 11:25:05','DD.MM.YYYY hh24:mi:ss'), ''  as par_id from dual union all
select 'A','64' as id, 'a_4' as name, TO_DATE('22.01.2020 11:26:05','DD.MM.YYYY hh24:mi:ss'), ''  as par_id from dual union all
select 'A','65' as id, 'a_5' as name, TO_DATE('22.01.2020 11:30:05','DD.MM.YYYY hh24:mi:ss'), ''  as par_id from dual union all
select 'Q','7' as id, 'query_7' as name, TO_DATE('22.01.2020 11:30:00','DD.MM.YYYY hh24:mi:ss'), '8'  as par_id from dual union all --просрочка
select 'A','8' as id, 'a_7' as name, TO_DATE('22.01.2020 11:45:00','DD.MM.YYYY hh24:mi:ss'), ''  as par_id from dual union all 
select 'Q','9' as  id, 'q_9' as name, TO_DATE('22.01.2020 11:45:00','DD.MM.YYYY hh24:mi:ss'), ''  as par_id from dual union all
select 'Q','10' as id, 'q_10' as name, TO_DATE('22.01.2020 11:45:00','DD.MM.YYYY hh24:mi:ss'), ''  as par_id from dual union all
select 'Q','11' as id, 'q_11' as name, TO_DATE('22.01.2020 11:45:00','DD.MM.YYYY hh24:mi:ss'), '12'  as par_id from dual union all --просрочка
select 'A','12' as id, 'a_11' as name, TO_DATE('22.01.2020 12:20:00','DD.MM.YYYY hh24:mi:ss'), ''  as par_id from dual  
)
select * from files
  match_recognize
  ( order by dt
    measures
      strt.dt + count(*) * interval '10' minute as last_term
    all rows per match
    pattern (strt queue*)
    define
      queue as dt < strt.dt + count(queue.*) * interval '10' minute
  )



ps
тип файла нужен чтоб отличить ответы от запросов без ответа

.....
stax
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917474
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

перестарался
select 'A','65' as id, 'a_5' as name, TO_DATE('22.01.2020 11: 27 :05','DD.MM.YYYY hh24:mi:ss'), '' as par_id from dual union all

на все запросы поступил ответ до 11:30:00
.....
stax
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917478
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
тип файла нужен чтоб отличить ответы от запросов без ответа
После того, как ты свалил всё в одну кучу, тебе это уже не поможет.
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917926
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые, а есть ли аналогичное match_recognize решение для 11й версии оракла?)
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917933
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O)
аналогичное match_recognize
Такого не бывает.
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917943
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O),

если я правилно понял задачу, то

1) ищем время закрытия заявки
2) для каждого заказа, суммируем незакрытые заявки которые пришли раньше
3) регламентное время равно Time+п2*10мин
4) выставляем флажок если фактическое фремя>регламентного

рісовать запрос?

ps
надо уточнить постановку

> Parid - у файлов ответа проставляются соответсвующие id файлов запроса

> После того, как сформировался ответ - у вопроса проставляется ссылка на его ответ.

.....
stax
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917948
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O)
Уважаемые, а есть ли аналогичное match_recognize решение для 11й версии оракла?)

Конечно.
Специализированная конвейерная функция.
...
Рейтинг: 0 / 0
Контроль регламентного времени запросом (расписание)
    #39917967
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O)
Уважаемые, а есть ли аналогичное match_recognize решение для 11й версии оракла?)
Цель SQL-но повторить логику Элика?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select id, name, dt, strt + cnt * interval '10' minute as last_term 
from files
model
dimension by (row_number() over (order by id) id)
measures (name, dt, cast(null as date) strt, 0 cnt)
rules iterate (1e9) until dt[iteration_number + 2] is null
(
  strt[iteration_number + 1] = case when strt[cv()-1] + (cnt[cv()-1]+1) * interval '10' minute > dt[cv()] then strt[cv()-1] else dt[cv()] end,
  cnt[iteration_number + 1] = decode(strt[cv()-1], strt[cv()], cnt[cv()-1]+1, 1)
)
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Контроль регламентного времени запросом (расписание)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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