如何在BigQuery中过滤重复页面并保留会话访问时序?
解决方案
你需要先为每个会话(session_id)和页面(pagePath)计算首次访问时间,再基于这个时间排序,同时确保会话与页面的组合唯一。修改后的查询语句如下:
SELECT session_id, pagePath FROM ( SELECT fullVisitorId || '.' || visitStartTime || '.' || visitNumber AS session_id, page.pagePath, MIN(DATETIME_ADD(DATETIME(TIMESTAMP_SECONDS(visitStartTime), "America/New_York"), INTERVAL hits.time MILLISECOND)) AS first_page_visit_time FROM `xx.xx.ga_sessions_*`, UNNEST(hits) AS hits WHERE hits.type = "PAGE" AND date = '20220403' GROUP BY session_id, pagePath ) ORDER BY session_id, first_page_visit_time ASC
修改说明:
- 移除冗余的
SELECT DISTINCT:GROUP BY session_id, pagePath已经保证每个会话-页面组合仅出现一次,无需额外去重。 - 子查询保留首次访问时间:通过
MIN()函数获取每个页面在会话中的最早访问时间,作为后续排序的依据。 - 外层仅返回所需字段:外层查询只选择
session_id和pagePath,同时按会话ID和首次访问时间升序排列,确保页面按访问先后顺序展示。
内容的提问来源于stack exchange,提问作者dddela
相关产品推荐
相关产品推荐

