Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Адаптивная группировка событий по времени и интервалу / 6 сообщений из 6, страница 1 из 1
11.01.2021, 16:31
    #40034902
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адаптивная группировка событий по времени и интервалу
Есть такая задача, пока теоретическая.
Есть таблица с событиями, у каждого события есть дата и время (или таймштамп).
События, интервал между которыми менее N1=10 секунд, безусловно группируются в один блок.
События, интервал между которыми более N2=600 секунд, безусловно начинают новую группу (новый блок).
А вот события, интервал между которыми от 10 до 600 секунд, группируются или начинают новый блок в зависимости от предыдущих интервалов: если текущий интервал не более, чем на 15% больше максимального интервала текущей группы, то текущее событие включается в текущую группу (и в текущей группе обновляется максимум); если текущий интервал не менее, чем на 15% меньше среднего интервала текущей группы, то текущий интервал начинает новую группу.
В идеале нужно минимизировать число групп/блоков, насколько это возможно (исключить отдельные группы/блоки из одиночных событий).
У меня это уведомления о различных изменениях, но можно рассматривать задачу, как группировку в чате или новостной ленте.

В принципе я примерно представляю себе, как сделать подобную группировку (case из четырех или пяти проверок).
Но насколько ресурсоемкой будет подобная группировка? Или лучше перенести эту задачу на клиента?
...
Рейтинг: 0 / 0
11.01.2021, 18:04
    #40034916
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адаптивная группировка событий по времени и интервалу
Облизывайся - pattern matching синтаксически легко бы решил задачу.
...
Рейтинг: 0 / 0
12.01.2021, 15:06
    #40035084
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адаптивная группировка событий по времени и интервалу
Верю. Но в принципе и на 10g такую группировку я примерно представляю себе как сделать, пусть это будет не так красиво и с трехуровневыми вложениями.
Или подобные задачи все же лучше делать на клиенте?
...
Рейтинг: 0 / 0
12.01.2021, 15:32
    #40035094
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адаптивная группировка событий по времени и интервалу
Alibek B.
на 10g
лучше уж на клиенте или в pl/sql (можно пайплайн функцию)
...
Рейтинг: 0 / 0
12.01.2021, 16:19
    #40035106
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адаптивная группировка событий по времени и интервалу
Alibek B.
если текущий интервал не более, чем на 15% больше максимального интервала текущей группы, то текущее событие включается в текущую группу (и в текущей группе обновляется максимум); если текущий интервал не менее, чем на 15% меньше среднего интервала текущей группы, то текущий интервал начинает новую группу
Среднего или минимального?
Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
with t(id, val) as
(
select 1, 180 from dual
union all select 2, 190 from dual
union all select 3, 200 from dual
union all select 4, 180 from dual
union all select 5, 170 from dual
union all select 6, 220 from dual
union all select 7, 300 from dual
union all select 8, 330 from dual
union all select 8.1, 290 from dual
union all select 8.2, 260 from dual
union all select 9, 150 from dual
union all select 10, 140 from dual
union all select 12, 120 from dual
union all select 12, 100 from dual
)
select id, val, lag(mn, 1, 1) over (order by id) grp
from t
match_recognize
(
  order by id
  measures match_number() mn
  all rows per match
  pattern (strt x*)
  define x as max(val) * 1.15 >= next(val) and next(val) >= min(val) * 0.85
);

        ID        VAL        GRP
---------- ---------- ----------
         1        180          1
         2        190          1
         3        200          1
         4        180          1
         5        170          1
         6        220          1
         7        300          2
         8        330          2
       8.1        290          2
       8.2        260          2
         9        150          3
        10        140          3
        12        120          3
        12        100          4

14 rows selected.


Alibek B.
Верю. Но в принципе и на 10g такую группировку я примерно представляю себе как сделать, пусть это будет не так красиво и с трехуровневыми вложениями.
Или подобные задачи все же лучше делать на клиенте?
Так ты сделай ее перед тем как топик создавать.
В процессе должно прийти понимание что для получения максимального/минимального (или среднего) в группе аналитикой надо знать где группа начинается.
Соответственно из SQL инструментов в 10g остаётся итеративная моделька.
...
Рейтинг: 0 / 0
12.01.2021, 17:39
    #40035130
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адаптивная группировка событий по времени и интервалу
Для ТС не актуально, но fix на всякий случай.
Код: 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.
with t(id, val) as
(
select 1, 180 from dual
union all select 2, 290 from dual
union all select 3, 200 from dual
union all select 4, 180 from dual
union all select 5, 170 from dual
union all select 6, 220 from dual
union all select 7, 300 from dual
union all select 8, 330 from dual
union all select 8.1, 290 from dual
union all select 8.2, 260 from dual
union all select 9, 150 from dual
union all select 10, 140 from dual
union all select 11, 120 from dual
union all select 12, 100 from dual
)
select id, val, mn grp
from (select t.*, lag(val) over (order by id) vv from t) t
match_recognize
(
  order by id
  measures match_number() mn
  all rows per match
  pattern (strt x*)
  define x as max(x.vv) * 1.15 >= next(x.vv) and next(x.vv) >= min(x.vv) * 0.85
);
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Адаптивная группировка событий по времени и интервалу / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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