SQL只获取与数据库中其他位置的最小日期关联的数据

时间:2014-12-01 19:44:32

标签: mysql

我想用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似乎只有一个用户,因此请使用CPC。 帐户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在结果集中是不同的 - 没有重复。

  1. 我该怎么做
  2. 是否可以通过将Created字段全部保留在SELECT所有内容来完成此操作?

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到,其中一些是

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;

OR

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
)