一天一道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) num
    from 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,没有运行验证,有错误的地方请指出~