原创声明:求连续90日每日的用户留存率 -- 全网唯一

打印 上一主题 下一主题

主题 928|帖子 928|积分 2784

   业务端需要求连续90日每日的用户留存率改怎么计算呢???
 
   一: 本文采用MySQL8.0环境
  1.   1: 建表数据
  2.     CREATE TABLE `user_login` (
  3.   `user_id` int NOT NULL,
  4.   `login_date` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;   MySQL8.0  或者 hive 执行<br><br><br>表里的数据如下:
复制代码
user_id login_date
  "1001"    "2021-12-12"
"1002"    "2021-12-12"
"1001"    "2021-12-13"
"1001"    "2021-12-14"
"1001"    "2021-12-16"
"1002"    "2021-12-16"
"1001"    "2021-12-19"
"1002"    "2021-12-17"
"1001"    "2021-12-20"
"1002"    "2021-12-14"
"1002"    "2021-12-20"
"1003"    "2021-12-12"
"1004"    "2021-12-18"
"1005"    "2021-12-20"
"1006"    "2021-12-14"
"1007"    "2021-12-14"
"1007"    "2021-12-19"
 
 
 二:执行SQL
[code]   select a.login_date 日期,       datediff(b.login_date , a.login_date) as days,   count(distinct if(datediff(a.login_date , a.login_date_min) = 0 ,a.user_id,null)) as 注册用户数,count(distinct if(datediff(b.login_date , a.login_date) != 0  ,if(datediff(b.login_date , a.login_date) != 0 and a.user_id = b.user_id, b.user_id,null),if(datediff(a.login_date , a.login_date_min) = 0  ,a.user_id,null))) as  days日留存用户数from (selectuser_id,login_date,case when rn =1 then login_date else null end login_date_minfrom(selectuser_id,login_date,row_number() over(partition by user_id order by login_date) rnfromuser_login) tmp)  aleft join user_login b on  b.login_date >=a.login_date  and datediff(b.login_date ,a.login_date)
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表