如何在Standard SQL窗口函数中添加时间约束,确保fs_mp事件早于add_to_cart
修改查询以校验
fs_mp_%事件早于add_to_cart事件 以下是调整后的Standard SQL查询,新增了基于server_timestamp的时间顺序校验逻辑:
SELECT * FROM base_query WHERE ( event_page_type = "product" AND ( -- Monthly price feature event_name LIKE "fs_mp_%" -- Add to cart events OR event_name = "add_to_cart" ) ) QUALIFY -- 保留所有fs_mp_%类事件 event_name LIKE "fs_mp_%" OR -- 仅保留同会话中存在更早fs_mp_%事件的add_to_cart事件 ( event_name = "add_to_cart" AND server_timestamp >= MIN(IF(event_name LIKE "fs_mp_%", server_timestamp, NULL)) OVER (PARTITION BY session_id) )
逻辑说明
- 保留
fs_mp_%事件:所有这类事件直接通过校验,无需额外时间判断,符合需求。 - 过滤
add_to_cart事件:- 用窗口函数
MIN(IF(event_name LIKE "fs_mp_%", server_timestamp, NULL)) OVER (PARTITION BY session_id)算出当前会话里最早发生的fs_mp_%事件时间;如果会话中没有这类事件,该值为NULL,对应的add_to_cart事件会被过滤。 - 只有当
add_to_cart事件的server_timestamp晚于或等于会话中最早的fs_mp_%事件时间时,才会被保留——这就确保了该会话中确实有fs_mp_%事件发生在add_to_cart之前。
- 用窗口函数
内容的提问来源于stack exchange,提问作者Luiscri
相关产品推荐
相关产品推荐

