如何获得点击之前的点击次数?

时间:2016-10-28 09:36:25

标签: sql postgresql postgresql-9.5

我在PostgreSQL 9.5.2数据库上有一个表events,其中包含iduseridevent_datetime列。我想为每个事件计算用户会话(最后30分钟)中先前事件的数量。这就是我想出的:

SELECT T1.id, COUNT(*) "cnt"
FROM events T1 
INNER JOIN events T2 
    ON T1.userid = T2.userid
   AND T1.event_datetime > T2.event_datetime -- T1 happened later than T2
   AND T1.event_datetime - INTERVAL '30 MINUTES' < T2.event_datetime  -- but not more than 30 minutes
GROUP BY T1.id;

但是,events表非常大,上面的查询需要很长时间。你有没有看到我如何优化它?

编辑:我刚刚意识到,通过排除匿名用户,我可以大幅减少表格大小。这暂时解决了我的问题。但仍然是一个有趣的问题。感谢您的评论!

1 个答案:

答案 0 :(得分:1)

有150个 K 事件的偏见用户导致性能问题。 从查询中删除此用户。

稍后我将发送一个不涉及删除用户的解决方案。