BigQuery - 如何选择每个用户点击的第一个广告系列?

Posted

技术标签:

【中文标题】BigQuery - 如何选择每个用户点击的第一个广告系列?【英文标题】:BigQuery - How to select the first campaign each user clicked on? 【发布时间】:2021-11-26 21:00:56 【问题描述】:

假设我有一个销售电子产品的网站。为了吸引客户,我在在线广告活动上投入了一些资金。

下表共有三列:user_id(标识每个用户的id)、event_date(用户点击广告的日期)和mktcampaign(广告活动的名称):

|user_id| event_date|mkt campaign
|   1   | 25-11-2021|FB - Black Friday
|   2   | 20-12-2020|G Display - Christmas campaign
|   1   | 22-12-2019|G Display - Christmas campaign 
|   3   | 12-10-2020|Whatsapp - July - campaign
|   2   | 01-08-2018|IG Post - Holidays campaign
|   3   | 30-08-2020|FB - Holidays campaign

我只想选择包含吸引每个用户访问我的网站的第一个广告系列的行。换句话说,我需要确定每个用户第一次访问我的网站的方式。

预期的结果是这样的:

 |user_id| event_date|mkt campaign
 |   1   | 22-12-2019|G Display - Christmas campaign
 |   2   | 01-08-2018|IG Post - Holidays campaign
 |   3   | 30-08-2020|FB - Holidays campaign

我知道我可以使用“ORDER BY event_date ASC”按日期对行进行排序。但是,我需要每个 user_id 仅显示一个结果(具有最旧广告系列的结果)。

请问,您知道如何在 BigQuery(BQ 标准 SQL)中执行此操作吗?

非常感谢。

【问题讨论】:

【参考方案1】:

考虑以下方法

select * from your_table where true
qualify 1 = row_number() over(partition by user_id order by parse_date('%d-%m-%Y', event_date))          

如果适用于您问题中的示例数据

with your_table as (
  select 1 user_id, '25-11-2021' event_date, 'FB - Black Friday' mkt_campaign union all
  select 2, '20-12-2020', 'G Display - Christmas campaign' union all
  select 1, '22-12-2019', 'G Display - Christmas campaign ' union all
  select 3, '12-10-2020', 'Whatsapp - July - campaign' union all
  select 2, '01-08-2018', 'IG Post - Holidays campaign' union all
  select 3, '30-08-2020', 'FB - Holidays campaign' 
)      

输出是

【讨论】:

感谢您的帮助!我仍在尝试理解“合格 1”的含义。是否是符合以下条件的行号:“row_number() over(partition by user_id order by parse_date('%d-%m-%Y', event_date))”? 是的。确切地。它过滤掉除了各自的第一行之外的所有行 使用 QUALIFY 而不是普通的 WHERE 谓词有什么优势?是不是因为普通的 WHERE 谓词需要分析函数在 SELECT 子句中? 试试看结果 :o) 如果还不清楚,请告知

以上是关于BigQuery - 如何选择每个用户点击的第一个广告系列?的主要内容,如果未能解决你的问题,请参考以下文章

LAST_VALUE with IF statement inside not backfill it's partition --> 在选择每个分区的第一行时丢失最后一个值(BigQuery/

如何根据 BigQuery 中的另一个现有行为每个用户添加记录?

BigQuery 的 DataTransferService 中的设置出错

2 个特定 Google Analytics(分析)页面点击之间的 Bigquery 时间

BigQuery:选择窗口中的第n个最小值,按另一个值排序

Bigquery - 交叉连接的替代方案