select user_id, date,lag(date, 1) over (partition by user_id order by date) as lastdate from login; select `date`, sum(case when lastdate is null then 1 else 0 end) as new from (select user_id, `date`,lag(`date`, 1) over (partition by user_id order by `date`) as lastdate from login) as t group ...