1.因为要求出所有日期的人数,所以最外层要group by date ,以此列出所有日期 2.子查询中,查出所有的日期,并按照user_id分组,date的升序排序,这样每个日期会有自己在每个user_id里的序号 3.每个user_id中排序靠前的是最小的日期,也就是新用户,则当这个用户中排名为第一的日期时,计为 1 ,否则不是新用户,计为0 SELECT a.date,sum(case when a.t_rank=1 then 1 else 0 end) from ( SELECT date,ROW_NUMBER() over(partition by user_id order by date asc)t_rank FROM login )a group by date