因此,我们假设我们有一个表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
我如何添加唯一性和最新推荐条件?
答案 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