我想用Netflix作为这个问题的例子,因为每个人都知道他们是谁。有了Netflix,有一个帐户持有人,也有用户。
以我自己的 Netflix 帐户为例,我是帐户持有人(我每个月都付费(,我的伴侣是用户,我的室友也是。所以 1 个帐户和 3 个用户。
我们想知道将帐户记入哪个营销渠道。营销渠道是用户级别的数据点,而不是帐户级别。因此,我们基于第一个帐户用户如何找到我们,然后希望将其应用于帐户的逻辑。
以下是我正在处理的查询
:SELECT
my.data AS Account_ID,
co.ID AS User_ID,
def.def_medium,
MIN(co.created) # Don't ask why I used MIN here, was hoping it'd act like a WHERE clause.
FROM
abc_emails.cid208 co
INNER JOIN abc_emails.def208 def ON def.eid = co.id
INNER JOIN abc_emails.my208 my ON my.eid = co.id AND my.my_id = 2765
GROUP BY Account_ID, User_ID, def_medium
下面是该查询的结果示例:
Account_ID | User_ID | Medium | Created
1 447503 Email 2014-02-05 03:53:42
1 679769 Banner 2014-05-30 05:55:29
1000 6477 CPC 2007-01-22 10:03:03
10000 26805 Organic 2008-07-28 01:34:05
10000 151153 import 2011-06-16 06:57:41
10000 151154 2011-06-16 06:57:42
10000 151155 2011-06-16 06:57:42
10000 151156 2011-06-16 06:57:42
10000 151157 none 2011-06-16 06:57:42
因此,对于帐户 ID 1,User_ID 447503看起来像第一个已知联系人,因此媒介应为电子邮件。帐户 1,000 似乎只有一个用户,因此请使用每次点击费用。帐户 10,000 有多个用户,第一个已知用户是有机媒体。
所以我想更改此查询以创建如下所示的结果集:
Account_ID | User_ID | Medium | Created
1 447503 Email 2014-02-05 03:53:42
1000 6477 CPC 2007-01-22 10:03:03
10000 26805 Organic 2008-07-28 01:34:05
Account_ID在结果集中是不同的 - 没有重复项。
- 我将如何做到这一点
- 是否可以通过将"已创建"字段一起排除在"选择"之外来执行此操作?
有很多方法可以做到这一点,其中一些是
select t1.* from abc_emails t1
left join abc_emails t2 on t2.Account_ID = t1.Account_ID
and t1.Created > t2.Created
where t2.Account_ID is null;
或
select t1.* from abc_emails t1
where not exists
(
select 1 from abc_emails t2
where t1.Account_ID = t2.Account_ID
and t1.Created > t2.Created
)