【问题标题】:Using where clause within a partition在分区中使用 where 子句
【发布时间】:2021-06-25 19:03:53
【问题描述】:

我有巨大的浏览量级别表,其中每个会话都有多个浏览量。

会话 -> 浏览量 - 1 : M

从综合浏览量表中,我需要将数据合并到每个会话的一行中,其中包含 FirstPageview、LastPageview、#ofvisitstoLogin 等元数据

  1. Firstpageview 定义为会话的第一个网页浏览量 (这个可以登录)

  2. Lastpageview 定义为 不是 /login (这不能是登录,如果是之前选择的综合浏览量 这个)

  3. #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


【解决方案1】:

LAST_VALUE支持IGNORE NULLS子句,可以和NULLIF(webpage_path, 'login')结合使用:

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(NULLIF(webpage_path,'login')) ignore nulls 
 over (partition by visitor_id, session_id order by timestamp asc) as last_page_view,
 count_if(webpage_path = 'login') 
 over (partition by visitor_id, session_id timestamp asc) as noofvisitstologin
from pageviews;

第二个:SUM(IIF(...)) 可以替换为COUNT_IF()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-16
    • 2020-02-08
    • 1970-01-01
    • 2021-11-14
    • 2016-03-24
    • 2018-04-14
    • 2016-11-26
    • 2017-06-21
    相关资源
    最近更新 更多