分析思路
最近用SQL做数据分析,发现重要的不是怎么使用工具,而是怎样利用好原始数据,得到想要的分析内容。
在SQL中,面对一列时间,应该没有函数可以直接计算行与行之间的时间差。(以我目前浅显的函数库储备来看没有)
当我们面对一个求连续时间差的需求时,可以利用排序函数、分组函数等,得出分组下所有行的时间差。
对应的方案,也可以用于数值类的列差。
案例
有3个用户,登录表(login)的数据如下,求:
1. 每个用户的最大连续登陆天数
2. 每个用户的最大连续离线天数
3. 假设6月内连续登陆3天算活跃,找出6月有多少个活跃用户
4. 假设连续离线7天以上算流失,找出多少个用户流失后再登陆
id | date |
---|---|
1 | 2023-06-01 |
1 | 2023-06-01 |
1 | 2023-06-02 |
1 | 2023-06-03 |
1 | 2023-06-07 |
1 | 2023-07-01 |
2 | 2023-06-15 |
2 | 2023-06-16 |
3 | 2023-06-21 |
3 | 2023-06-23 |
3 | 2023-06-24 |
3 | 2023-06-25 |
求连续登陆天数
本思路参考链接: SQL求连续时间问题
-----step1. 将用户登陆日期去重
select distinct id, date from login
-----step2. 将用户登陆日期,按照ID分组,登陆日期从小到大排序,我这里用的是开窗函数row_number(),可以参考站内大神的教程
with temp1 as (select distinct id, date from login)
select id, date, row_number()