变量时间序列PostgreSQL

时间:2019-02-25 10:53:18

标签: postgresql datetime time

我有一个类似于聚合问题的问题。我的上下文是:我有一个带有事件日志的表,我想根据创建这些事件的属性和时间间隔应用一些组成规则。

规则示例:我想返回“ 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中此类问题的最佳方法是什么?

0 个答案:

没有答案