我们有一组捕获并存储在Postgres数据库中的事件。为了简单起见,下面是一个示例:
| id|事件名|用户|事件日期时间|
| - -----|- -----|- -----|- -----|
| 一个|查看项目|鲍勃|2023-05-01 12:03|
| 2|访问主页|鲍勃|2023-05-01 12:12|
| 3|编辑配置文件|阿什利|2023-05-01 12:15|
| 4|查看项目|鲍勃|2023-05-01 12:25|
| 5个|查看项目|杰克|2023-05-01 12:26|
| 六|邀请用户|鲍勃|2023-05-01 12:28|
| 七个|执行搜索|杰克|2023-05-01 12:28|
| 八|提交票证|鲍勃|2023-05-01 12:29|
| 九个|执行搜索|鲍勃|2023-05-01 12:55|
| 十个|执行搜索|阿什利|2023-05-01 12:59|
基于这些事件,我们试图获得一些关于用户参与度的见解。具体来说,我们希望找出一个用户或一组用户的平均会话持续时间和平均会话数。出于我们的目的,我们将“会话”定义为用户执行操作的任何10分钟间隔。如果在一个特定的动作X之后,他们在10分钟或更长时间内没有执行另一个动作,我们认为动作X是该会话的最后一个动作,任何后续动作都是下一个会话的第一个动作,依此类推。
例如,基于上表,我们看到Bob在12:03查看了一个项目,然后9分钟后他访问了主页。但是他的下一个动作直到12:25才发生-所以基本上有一个会话超时。然后同样的事情发生在12点29分,之后他没有做任何事情,直到12点55分。所以在12:00到1:00的时间间隔里,他有三个不同的疗程,而杰克有一个,阿什利有两个。
根据上述条件,查询将返回什么:
- 用户(或用户组)的平均会话持续时间
- 平均会议次数
- 每节课最常见的活动,例如由Jack和阿什利组成的小组在每个会话中执行了多少次“执行搜索”活动
这不是一个我们熟悉的主题,所以如果我们需要采取不同的策略(例如:创建另一个表/视图与这些派生的统计数据,然后查询),我很乐意红色更多关于这一点了。
1条答案
按热度按时间dxpyg8gm1#
使用
cte
在最后生成会话组和聚合:See fiddle