一天一道Sql题(day05)
有用户登录表A,字段如下:
字段 类型 含义
user_id bigint 用户uid
device_id bigint 设备ID
login_date string 登录日期
求解:如果用户第一天登录算新用户,求每一天登录的新老用户数
思路:
用开窗函数增加一个排序列。根据用户id分组后按照登录时间降序排序,如果排名是1说明用户是第一次登录是新用户,否则就是老用户
使用对日期分组,在sum出每天新老用户数
sql:
with t as (select user_id,login_date,row_number() over(partition by user_id order by login_date desc) numfrom A
)
select login_date,sum(if(num==1,1,0)) as new_user,sum(if(num>1,1,0)) as old_user
from t
group by login_date
order by login_date desc
我是在csdn上直接手敲的sql,没有运行验证,有错误的地方请指出~