题解 | #牛客每个人最近的登录日期(五)#

牛客每个人最近的登录日期(五)

https://www.nowcoder.com/practice/ea0c56cd700344b590182aad03cc61b8

  1. 首先将login第二天的数据通过user_id字段与今天的数据联结成一张表;
  2. 使用 l1.user_id not in (select user_id from login where date < l1.date) 条件筛除老用户;
  3. 计算出新用户的次日留存率,此时没有新用户登录即次日留存率为0的日期不会显示,所以还要通过union的方式将这部分数据补充上;
  4. 使用一个新的select语句,找出login表中新用户数量为0的日期,将次日留存率直接返回0.000;
  5. 最后按日期升序排列即可。

l1.id

l1.user_id

l1.client_id

l1.date

l2.id

l2.user_id

l2.client_id

l2.date

1

2

1

2020-10-12

4

2

2

2020-10-13

2

3

2

2020-10-12

None

None

None

None

3

1

2

2020-10-12

5

1

2

2020-10-13

4

2

2

2020-10-13

None

None

None

None

5

1

2

2020-10-13

None

None

None

None

6

3

1

2020-10-14

None

None

None

None

7

4

1

2020-10-14

8

4

1

2020-10-15

8

4

1

2020-10-15

None

None

None

None

select *
from (
    select
        l1.date,
        format (count(l2.user_id) / count(l1.user_id), 3)
    from login l1
    left join login l2 on l2.user_id = l1.user_id and datediff (l2.date, l1.date) = 1
    where l1.user_id not in (select user_id from login where date < l1.date)
    group by l1.date

    union all

    select
        l1.date,
        0.000
    from login l1
    where (
        select count(*)
        from login l2
        where l2.date = l1.date and l2.user_id not in (select user_id from login where date < l1.date)
    ) = 0
    group by l1.date
) t
order by t.date;

全部评论

相关推荐

小肥罗:此乃引蛇出洞之计,勾出你想去杭州的原因再告诉你不在杭州,让你打脸,自己离开。好一招抛砖引玉,虾仁猪心。你回复:计划去杭州,但我心中第一选择是宁波~巧了! 这计名叫“阿Q精神胜利法之厚脸皮不要脸我不尴尬谁爱尴尬谁尴尬去”之计!克制一切!
这个工作能去吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务