使用group by获取计数,同时具有其他唯一性条件

时间:2017-08-17 04:24:45

标签: mysql

因此,我们假设我们有一个表referrals,其结构如下:

(string) referral_id, (string) referrer, (string) user_id, (int) timestamp, (int) condition

我想要的是在任何特定时刻,condition>的不同用户的数量。 0,按推荐人分组。此外,如果用户有condition> 0由多个引用者,只应计算最近的推荐。所以,如果两个人都推荐人A'和推荐人B'推荐给定用户,但推荐人B更新,只有推荐人B会将用户添加到他们的计数中。

我知道为了通过推荐人获得计数,我会做

SELECT referrer, COUNT(DISTINCT(user_id)) 
FROM referrals 
WHERE condition > 0 
GROUP BY referrer

我如何添加唯一性和最新推荐条件?

1 个答案:

答案 0 :(得分:0)

使用SQL select only rows with max value on a column中的一种技术,使用可为每个用户获取最新引荐的子查询,而不是查询referrals表本身。

select referrer, COUNT(DISTINCT user_id))
FROM (SELECT referrer, user_id
      FROM referrals AS r
      JOIN (SELECT user_id, MAX(timestamp) AS timestamp
            FROM referrals
            WHERE condition > 0
            GROUP BY user_id) AS maxr
      ON r.user_id = maxr.user_id AND r.timestamp = maxr.timestamp) AS x
GROUP BY referrer