У меня есть проблема, которая напоминает проблему агрегации.Мой контекст таков: у меня есть таблица с журналом событий, и я хочу применить некоторые правила композиции, основанные на атрибутах и интервалах времени, в которые эти события были созданы.
Пример правила: я хочу вернуть группировкусобытий "VisitProduct", которые были созданы в течение 10 секунд, содержат один и тот же product_id и произошли как минимум 3 раза за этот период.
Пример данных:
+--------------+-------+--------------------------+-------------------+----------+
| name | actor | created | properties | event_id |
+--------------+-------+--------------------------+-------------------+----------+
| VisitProduct | 1 | 2019-02-24T20:25:31.446Z | {"product_id": 3} | 1 |
+--------------+-------+--------------------------+-------------------+----------+
| VisitProduct | 1 | 2019-02-24T20:25:35.446Z | {"product_id": 3} | 3 |
+--------------+-------+--------------------------+-------------------+----------+
| VisitProduct | 1 | 2019-02-24T20:25:39.446Z | {"product_id": 3} | 4 |
+--------------+-------+--------------------------+-------------------+----------+
| VisitProduct | 1 | 2019-02-24T20:25:40.446Z | {"product_id": 3} | 7 |
+--------------+-------+--------------------------+-------------------+----------+
| VisitProduct | 1 | 2019-02-24T20:25:43.446Z | {"product_id": 3} | 11 |
+--------------+-------+--------------------------+-------------------+----------+
| VisitProduct | 1 | 2019-02-24T20:25:48.446Z | {"product_id": 3} | 18 |
+--------------+-------+--------------------------+-------------------+----------+
Пример вывода послеquery:
+-----------+
| event_ids |
+-----------+
| 1,3,4,7 |
+-----------+
Как видно из события с идентификатором 1, в течение следующих 10 секунд он проводил поиск других событий с таким же свойством, группировал и отображал их, поскольку их было не менее 3.появления в этом интервале.
Одно и то же событие не может быть сгруппировано более одного раза, поэтому комбинации (3,4,7,11) или (4,7,11,18) или (7,11,18) не были сформированы, поскольку одно из этих событий уже было сгруппировано ранее.
Моя главная проблема заключается в том, что 10-секундное окно не является фиксированным, поскольку оно всегда будет извлекаться издата создания первого события, если в этом диапазоне было создано 2 других события с таким же свойством product_id.
Каков наилучший способ решения этой проблемы в postgresql?