Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Контроль регламентного времени запросом (расписание) / 25 сообщений из 35, страница 1 из 2
22.01.2020, 13:19
    #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
22.01.2020, 13:48
    #39917288
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль регламентного времени запросом (расписание)
(o-O)
Нужно запросом выделить те файлы ответов, которые сформированы с нарушением срока.
Не умеешь делать self-join и арифметикой дат и интервалов не владеешь?
(o-O)
Type -это тип файла - один из двух или Query или Answer
Не нужен. Достаточно Parid.
...
Рейтинг: 0 / 0
22.01.2020, 14:21
    #39917306
(o-O)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль регламентного времени запросом (расписание)
Можно поподробней?)
Таблицу с собой же пересек, получил время для каждого ответа с момента времени файла запроса.
Контролирую его с произведением 10 минут на количество запросов полученных за последние 10 минуты для конкретного запроса.
Но дырка в том, что если какой то новый запрос пришел позже яем через 10 минут и к этому времени еще не все ответы сформировались..
...
Рейтинг: 0 / 0
22.01.2020, 14:29
    #39917315
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль регламентного времени запросом (расписание)
(o-O)
Можно поподробней?)
Нельзя. Ибо недочитал.
Предоставь тестовые данные в удобной для использования форме. И желаемый результат на них.
...
Рейтинг: 0 / 0
22.01.2020, 15:01
    #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
22.01.2020, 15:13
    #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
22.01.2020, 15:30
    #39917370
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль регламентного времени запросом (расписание)
Elic,

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

В любом случае скорее всего решается однопроходной моделью, а взависимости от деталей может и аналитикой. :)
Но мы можем только гадать что именно требуется.
...
Рейтинг: 0 / 0
22.01.2020, 15:33
    #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
22.01.2020, 15:37
    #39917377
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль регламентного времени запросом (расписание)
Кобанчег
В любом случае скорее всего решается однопроходной моделью
Тут должен хорошо пригодиться match_recognize для разбиения на группы, когда была очередь.
...
Рейтинг: 0 / 0
22.01.2020, 15:54
    #39917391
iOracleDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль регламентного времени запросом (расписание)
(o-O),

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

признак наличия очереди, разрыв более 10 минут как здесь 22064462 или
еще нужно учитывать время реального ответа и брать худший их результатов.
...
Рейтинг: 0 / 0
22.01.2020, 16:15
    #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
22.01.2020, 16:17
    #39917424
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль регламентного времени запросом (расписание)
(o-O),

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

....
stax
...
Рейтинг: 0 / 0
22.01.2020, 16:27
    #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
22.01.2020, 16:36
    #39917442
(o-O)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль регламентного времени запросом (расписание)
Stax,

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

Сппчибо! Интересное решение, похоже на правду!! Буду пробовать)
...
Рейтинг: 0 / 0
22.01.2020, 17:25
    #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
22.01.2020, 17:30
    #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
22.01.2020, 17:34
    #39917478
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль регламентного времени запросом (расписание)
Stax
тип файла нужен чтоб отличить ответы от запросов без ответа
После того, как ты свалил всё в одну кучу, тебе это уже не поможет.
...
Рейтинг: 0 / 0
23.01.2020, 15:20
    #39917926
(o-O)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль регламентного времени запросом (расписание)
Уважаемые, а есть ли аналогичное match_recognize решение для 11й версии оракла?)
...
Рейтинг: 0 / 0
23.01.2020, 15:35
    #39917933
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль регламентного времени запросом (расписание)
(o-O)
аналогичное match_recognize
Такого не бывает.
...
Рейтинг: 0 / 0
23.01.2020, 15:50
    #39917943
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль регламентного времени запросом (расписание)
(o-O),

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

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

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

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

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

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

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

Конечно.
Специализированная конвейерная функция.
...
Рейтинг: 0 / 0
23.01.2020, 16:31
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Контроль регламентного времени запросом (расписание) / 25 сообщений из 35, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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