如何解决坚持看似简单的SQL密集任务
一直坚持这个问题,可以使用建议或帮助。
表格中的内容是网站上的基本用户流量。对于每个会话ID,从开始(访问主页)到结束(购买)都有一个访问页面。时间戳已对其进行排序,以获取在此过程中访问的页面数。此“页数”也已按会话ID进行了分区,以便每次ID更改时都返回1。
我现在需要做的是分配一个步数(突出显示的是我要实现的目标)。这应该分配相似的计数,但不会重复执行重复的计数(即,某人访问了多个产品页面-它是多个页面,但仍然只有一个“产品视图”步骤。
您会认为这将使用密集会话(按会话ID划分)来完成-但这就是我遇到的问题。您无法按页数进行订购,因为这将为每个步骤计数分配一个唯一的编号。您不能按顺序订购,因为那样会按字母顺序订购。
我该怎么做?
所需结果的屏幕截图:
非常感谢!
解决方法
使用滞后时间看两个值是否相同,然后求和:
select t.*,sum(case when prev_cs = custom_step then 0 else 1 end) over (partition by session_id order by timestamp) as steps_count
from (select t.*,lag(custom_step) over (partition by session_id order by timestamp) as prev_cs
from t
) t
,
以下是用于BigQuery标准SQL
#standardSQL
SELECT * EXCEPT(flag),COUNTIF(IFNULL(flag,TRUE)) OVER(PARTITION BY session_id ORDER BY timestamp) AS steps_count
FROM (
SELECT *,custom_step != LAG(custom_step) OVER(PARTITION BY session_id ORDER BY timestamp) AS flag
FROM `project.dataset.table`
)
-- ORDER BY timestamp
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。