我正在尝试为网站流量构建灵活的归因模型。我开始制作最后一次点击模式,根据访问者在转换前最后一次访问的情况将转化归因于流量渠道。所以:在SQL Server 2012中选择满足条件x的最大值
Visitor Visit Channel ConversionId
visitor a visit 1 email 123
visitor a visit 2 email 123
visitor a visit 3 direct 123
visitor b visit 1 seo 123
visitor b visit 2 direct 123
visitor b visit 3 email 123
visitor c visit 1 seo 123
visitor c visit 2 direct 123
visitor c visit 3 direct 123
在上面的例子中,我会计算每个访问者的最终访问并将转换归因于该频道。因此,访问者a和访问者c的转化将归因于直接,而访问者b则归因于电子邮件。
现在我希望能够排除direct,并因此能够将转换归因于最后一个非直接渠道。在这种情况下,访客a和访客b的转化将归因于电子邮件(访客a的第三次访问将被排除),而访客c的转化将归因于se(因为c的第二次和第三次访问将被排除)。
我有这个成立至今的方式是(和一些这看上去有点愚蠢,因为我剥夺了一些连接和识别的简单信息出来):
WITH test (visitor,
visit, --a number unique for each visitor row but not necessarily unique across all visits
channel,
conversionid,
rn) AS
(
SELECT visitorid AS visitor,
visitid AS visit,
channel AS channel,
conversionid AS conversionid
rn = ROW_NUMBER() OVER (PARTITION BY conversionid ORDER BY visit DESC)
FROM db
GROUP BY visitorid,
visitid,
channel,
conversionid)
SELECT visitor,
MAX(visit) AS maxvisit,
channel,
conversionid
FROM test
WHERE rn = 1
GROUP BY visitor,
channel
ORDER BY visitor;
这给了我最后点击归属。 (对于我来说,这样做有一个更简单的方法,但这种方式看起来并不灵活 - 我希望能够轻松地更改查询以排除渠道。)我的问题是,我该怎么做才能排除直接并将转化归因于最后一个非直接渠道?如果需要,我还希望能够排除其他渠道,以便我可以构建不同的归因模型。
感谢一百万人。
什么,如果直接是用户的唯一渠道是否要排除该用户的所有在一起吗? – Matt
加我看过你的代码和你的示例数据,并没有太多的区别。我可能会建议给我们一个例子,因为它更直接地与您的代码相关,然后向我们呈现您期望的输出。例如,MAX(visit)似乎无论通道如何都会获得Last VisitId。行号也是如此......所以你需要MAX(VisitId),然后MAX(VisitId)的Channel不是直接的,或者简单地MAX(VisitId,不是直接的)和该id的频道? – Matt
有没有什么原因让你不要简单地添加“WHERE频道<>'直接'”? –