问题描述
我有一张应用程序事件数据表。每行都有一个user_id,一个时间戳,一个page_id,一个event_name和其他字段。我现在关心的事件是page_open和button_click事件,但是在这两种事件之间可能会发生其他10种事件类型,例如滚动。用户可能会多次打开同一页面,但是每次都必须单击页面上的一个按钮,就像在下面的示例中看到的那样。
user_id timestamp page_id event_name
------- ---------- ------- --------------
71 12:00:34 307 page_open
88 13:01:44 307 page_open
71 13:02:09 307 page_open
71 13:02:11 307 scroll
71 13:04:41 307 page_open
71 13:04:42 307 scroll
71 13:04:45 307 button_click_a
71 13:08:30 307 page_open
88 13:09:01 307 button_click_b
对于每个用户的每个page_open事件,我想要一个附加列来告诉我是否最终单击了按钮。我没有要使用的页面“会话”,因此我必须查找在button_click时间戳记之前发生的最大page_open时间戳记。换句话说,我要将上面的表转换成下面的表
user_id timestamp page_id event_name button_event
------- ---------- ------- ---------- --------------
71 12:00:34 307 page_open NULL
88 13:01:44 307 page_open button_click_b
71 13:02:09 307 page_open NULL
71 13:04:41 307 page_open button_click_a
71 13:08:30 307 page_open NULL
我试图将page_open和button_click事件分成两个表,并对user_id和page_id进行LEFT JOIN
,如下所示,但是当然不起作用,因为它使按钮点击与所有page_opens相匹配该page_id。我只想将按钮的点击匹配到相应的page_open事件。
SELECT
a.user_id,a.timestamp,a.page_id,a.event_name,b.event_name AS button_event
FROM
(SELECT * FROM events WHERE event_name = 'page_open') a
LEFT JOIN
(SELECT * FROM events WHERE event_name = 'button_click_a' OR event_name = 'button_click_b') b
ON
a.user_id = b.user_id AND
a.page_id = b.page_id
;
我是第一次使用这样的事件数据。您可以提供的任何帮助都会很棒。解决此问题的正确方法是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)