SELECT l.date, 
    COUNT(CASE WHEN l.user_id=a.user_id AND l.date=a.date THEN l.user_id ELSE null END) new
FROM login l,
(
    SELECT user_id,MIN(date) date
    FROM login
    GROUP BY user_id
) a
GROUP BY l.date
ORDER BY l.date;

我的思路: 首先找出新用户及其注册日期作为表a,然后在login表中按日期分组去重,如果user_id、date和a表匹配则计数(即每组日期中满足条件是新用户则计数) 对比高赞解题思路,我认为他的看上去更加简洁明了,省略了创建表a的动作。 计数神器——sum+case方法,不容易出错。

select date,
    sum(case when (user_id,date) in 
    (select user_id,min(date) from login group by user_id)
    then 1 else 0 end)
from login
group by date
order by date;