【发布时间】:2021-06-25 19:03:53
【问题描述】:
我有巨大的浏览量级别表,其中每个会话都有多个浏览量。
会话 -> 浏览量 - 1 : M
从综合浏览量表中,我需要将数据合并到每个会话的一行中,其中包含 FirstPageview、LastPageview、#ofvisitstoLogin 等元数据
-
Firstpageview 定义为会话的第一个网页浏览量 (这个可以登录)
-
Lastpageview 定义为 不是 /login (这不能是登录,如果是之前选择的综合浏览量 这个)
-
#ofvisitstologin 定义为登录时登陆的#oftimesthesession
| visitorid | sessionid | timestamp | webpagepath |
|---|---|---|---|
| abc | 123 | 2021-01-01 10:30:00 | homepage |
| abc | 123 | 2021-01-01 10:30:50 | login |
| abc | 123 | 2021-01-01 10:31:00 | page2 |
| abc | 123 | 2021-01-01 10:32:50 | page3 |
| abc | 123 | 2021-01-01 10:33:00 | page2 |
| abc | 123 | 2021-01-01 10:35:50 | login |
我想要的输出,
| visitorid | sessionid | FristPageview | LastPageview | #ofvisitstoLogin |
|---|---|---|---|---|
| abc | 123 | homepage | page2 | 2 |
是否可以使用窗口函数来做到这一点?不使用子查询/连接,因为这是一个巨大的表,它会影响性能。
我的查询示例,
select
visitor_id,
session_id,
first_value(webpage_path) over (partition by visitor_id, session_id order by timestamp asc) as first_pageview,
last_value(webpage_path) over (partition by visitor_id, session_id order by timestamp asc) as last_page_view,
sum(iff(webpage_path = 'login', 1, 0)) over (partition by visitor_id, session_id timestamp asc) as noofvisitstologin
from pageviews;
但此代码不起作用,因为如果我运行此代码,last_page_view 列将是“登录”。但我需要它改为“page2”。
这是否可以在不使用子查询/自连接的情况下实现?
【问题讨论】:
-
我删除了冲突的数据库标签。请为您真正使用的数据库产品只添加一个标签(Redshift与Postgres不同)
标签: sql snowflake-cloud-data-platform