题解 | #找出待召回的流失用户#
找出待召回的流失用户
https://www.nowcoder.com/practice/74ec0a3766bf480ab7690486943678a4
解题思路
这道题其实不用想得那么复杂,其实很简单。
难点可能在于:
- 聚合函数的使用
- 题目的当前时间是指整个表格当中最大的时间
由于group by的执行顺序在having前面,所以在having的时候已经分组了。
故求出当前时间用:
select max(login_date)
from user_login_tb
作为end_time
每组最大的时间用max(login_date) 作为start_time
用timestampdiff求出时间差
timestampdiff (day,max(login_date),
(
select max(login_date)
from user_login_tb
)
) >= 30
完整代码
select
uid,
count(distinct login_date) as days,
count(uid) as times
from
user_login_tb
group by
uid
having
timestampdiff (
day,
max(login_date),
(
select
max(login_date)
from
user_login_tb
)
) >= 30
and count(uid) between 3 and 4
