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

В принципе я примерно представляю себе, как сделать подобную группировку (case из четырех или пяти проверок).
Но насколько ресурсоемкой будет подобная группировка? Или лучше перенести эту задачу на клиента?
...
Рейтинг: 0 / 0
Адаптивная группировка событий по времени и интервалу
    #40034916
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Облизывайся - pattern matching синтаксически легко бы решил задачу.
...
Рейтинг: 0 / 0
Адаптивная группировка событий по времени и интервалу
    #40035084
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верю. Но в принципе и на 10g такую группировку я примерно представляю себе как сделать, пусть это будет не так красиво и с трехуровневыми вложениями.
Или подобные задачи все же лучше делать на клиенте?
...
Рейтинг: 0 / 0
Адаптивная группировка событий по времени и интервалу
    #40035094
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alibek B.
на 10g
лучше уж на клиенте или в pl/sql (можно пайплайн функцию)
...
Рейтинг: 0 / 0
Адаптивная группировка событий по времени и интервалу
    #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
Адаптивная группировка событий по времени и интервалу
    #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
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Адаптивная группировка событий по времени и интервалу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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