# 新用户:没有上一条记录的用户。
 # 第一步:针对每个用户,都有它自己是新用户的那一天,先找出那一天,也即他没有上一条记录的日子。
 # 第二步:针对这些日子,找出它们分别有多少新用户。注意,这里只能找出非0的。
 # 第三步:为了把那些没有出现新用户的日子也体现出来,需要拿原始数据进行左连接,把缺失值补0。
select
    l.date as date,
    ifnull(a.counts,0) as new
from
   (select distinct date from login) as l
left outer join 
# 第二步,找出每一天的新用户个数,但是由于 Null的原因,那些没有新用户的日子没出现。  
    (select
        b.date,
        count(*) as counts
    from
        (
# 第一步,先找出每个人的上次登录时间,看看谁在哪一天是第一次登录,它应该就属于这一天的新用户
        select
            user_id,
            client_id,
            date,
            lag(date, 1) over (partition by user_id order by date) as lag_date
        from
            login) b
    where
        b.lag_date is null
    group by
        b.date) as a
on 
    l.date = a.date
order by 
    l.date