【发布时间】:2020-07-02 15:08:46
【问题描述】:
我正在使用谷歌大查询来跟踪一些客户点击我的网站。我遵循一个简单的规则集:
-
如果客户在同一天连续多次访问同一来源,我只想查看第一个命中来源。
-
如果客户在不同的日子连续多次访问同一来源,我只想查看第一个命中来源。
-
如果它们出现在同一天但不是连续出现,我想查看所有热门来源。
目前,我正在使用以下内容:
rank() over (partition by customer_code, hit_source order by hit_timedate) rnk
如果我过滤“where rnk = 1”,这可以让我完成前两个步骤。这只会给我不同的命中来源,无论它们是否在同一天,因为我在 hit_timedate 中有时间。但它并没有给我第三步,因为排名是由 hit_source 划分的,当它看到相同的源时会改变。
如果有人可以帮助我,将不胜感激。
编辑:
不确定如何添加/上传示例数据集,所以我在这里尝试过:
Customer_Code Hit_Source Hit_Timedate
101 Facebook 25/05/2020 10:30am
101 Facebook 25/05/2020 11:45am
101 Facebook 25/05/2020 11:55am
101 Twitter 25/05/2020 12:30am
101 Facebook 25/05/2020 13:00pm
101 Google 25/05/2020 15:00pm
101 Instagram 26/05/2020 09:00am
理想的结果集应该是这样的:
Customer_Code Hit_Source Hit_Timedate Rank
101 Facebook 25/05/2020 10:30am 1
101 Facebook 25/05/2020 11:45am 2
101 Facebook 25/05/2020 11:55am 3
101 Twitter 25/05/2020 12:30am 1
101 Facebook 25/05/2020 13:00pm 1
101 Google 25/05/2020 15:00pm 1
101 Instagram 26/05/2020 09:00am 1
所以,根据我想在上面实施的规则.. 我在这里遇到的主要问题是能够将样本中的第 5 行列为“1”。我想这样做是因为最后两个“Facebook”点击不是连续的。但是能够使用我实施的前 2 条规则来做到这一点,我正在苦苦挣扎。
【问题讨论】:
-
请提供样本数据和期望的结果。
-
正如@GordonLinoff 所说,您能否分享示例数据和预期结果?因此,最好创建一个查询并对其进行测试。
-
您好,示例和所需结果集已作为版本添加到我的原始帖子中。谢谢。
-
@dbdbdb1993,为什么 Facebook 在 25/05/2020 下午 13:00 排名 1 而不是 4?
-
你好 Alexandre,这是因为 facebook 的第 4 行不是连续的,因为之前有不同的 hit_sources 所以它会重置回 1 级,这是我计划实现的逻辑。希望你能理解
标签: sql google-bigquery ranking