我有一个类似于聚合问题的问题。我的上下文是:我有一个带有事件日志的表,我想根据创建这些事件的属性和时间间隔应用一些组成规则。
规则示例:我想返回“ 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 |
+--------------+-------+--------------------------+-------------------+----------+
查询后的输出示例:
+-----------+
| event_ids |
+-----------+
| 1,3,4,7 |
+-----------+
从ID 1的事件可以看出,它在接下来的10秒钟内搜索是否还有其他具有相同属性的事件,将它们分组并显示,因为在该时间间隔内至少发生了3次。
同一事件不能被分组多次,因此未形成组合(3,4,7,11)或(4,7,11,18)或(7,11,18),因为这些事件已经被分组了。
我的主要问题是10秒窗口不是固定窗口,因为如果在此范围内创建了两个具有相同product_id属性的其他事件,它将始终从第一个事件的创建日期开始获取。
解决PostgreSQL中此类问题的最佳方法是什么?