ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

一天一道Sql题(day05)

2026/9/25 23:40:57 拓冰建站 浏览量
一天一道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,没有运行验证,有错误的地方请指出~