HQL - 查询每天的新增用户数

文章讲述了如何使用SQL从user_login_detail表中查询每日新增用户的数量。通过提取登录日期,对用户ID和日期进行分组,利用row_number()函数标识首次登录,再筛选出rn=1的记录,最后按日期统计用户ID数量,得到每天的新用户数。
摘要由CSDN通过智能技术生成

水善利万物而不争,处众人之所恶,故几于道💦

题目:

从用户登录明细表(user_login_detail)中查询每天的新增用户数,若一个用户在某天登录了,且在这一天之前没登录过,则任务该用户为这一天的新增用户。

在这里插入图片描述

with a as(
select 
  user_id,
  substring(login_ts,1,10) login_day --先切出年月日的格式
from user_login_detail
), b as(
select 
  user_id,
  login_day,
  row_number() over(partition by user_id order by login_day) rn --编号,取首次登录的
from a group by user_id,login_day  --然后以用户id和日期分组,去掉同一天登录多次的
), c as(
select * from b where rn=1
)

select login_day login_date_first , count(user_id) user_count from c group by login_day

总结:

  1. 先取到日期,精确到日,因为统计的是日新增用户

  2. 然后根据日期和用户id分组,去掉每日登录多次的记录;同时编号

  3. 取rn=1,即首次登录,也就是这天是新增的用户

  4. 然后以日期分组,count(user_id),结果就是这一天的新增用户

date_format():需要两个参数,第一个参数是要格式化的日期,第二个参数是指定输出格式的字符串,例如:date_format(‘2021-07-01 12:34:56’, ‘yyyy/MM/dd HH:mm:ss’)

下面是用date_format()切割日期,其他都一样。

with a as (
select
  user_id,
  date_format(login_ts,"yyyy-MM-dd") login_day  --取日期也可以用date_format()函数
from user_login_detail
), b as(
select
  user_id,
  login_day,
  row_number() over(partition by user_id order by login_day) rn
from a group by user_id,login_day
), c as(
select * from b where rn=1
)

select login_day login_date_first, count(user_id) user_count from c group by login_day
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿年、嗯啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值