• 连续3天日活问题与答案


    表Accounts

    Column Name     Type

        id                        int

        name                  varchar

    id是该表主键

    该表包含账户id和账户的用户名

    表Logins

    Column Name     Type

        id                       int

       login_date           date

    该表无主键,可能包含重复项

    该表包含登录用户的账户id和登录日期,用户也许一天内登录多次

    写一个SQL查询,找到活跃用户的id和name

    活跃用户是指那些至少5天登录账户的用户

    返回的结果表按照id排序

    结果表格式如下例所示

    Accounts表

    id          name

    1            Winston

    7            Jonathan

    Logins表

    id            login_date

    7              2020-05-30

    1              2020-05-30

    7              2020-05-31

    7              2020-06-01

    7              2020-06-02

    7              2020-06-02

    7              2020-06-03

    1      2020-06-07

    7              2020-06-10

    Result表

    id          name

    7          Jonathan

    id = 1的用户Winston仅仅在不同的2天内登录了2次,所以Winston

    不是活跃用户.
    id = 7 的用户 Jonathon 在不同的 6 天内登录了 7 次, , 6 天中有 5 天是连续的, 所以, Jonathan 是活跃用户.

    -- mysql答案
    SELECT DISTINCT A.*
    FROM Accounts A
    JOIN logins L1 USING(id)
    JOIN Logins L2 ON L1.id=L2.id AND DATEDIFF(L2.login_date,L1.login_date) BETWEEN 0 AND 4
    -- 对每个id相同的日期都只连接相差4天之内的日期。即对每个日期都检索一下是否有5个连续的日期。
    -- 只要5天之内,日期有一个不连续,那么去重后每一组的天数必然少于5天。
    GROUP BY A.id,A.name,L1.login_date
    HAVING COUNT(DISTINCT L2.login_date)=5

    --hive答案
    select
    name
    from
    (select
    name,
    date_sub(logindate,rn) as rndate,
    count(1) as co
    from (
    select
    name,
    logindate,
    row_number() over(partition by name order by logindate) as rn
    from login )a
    group by name,rndate)b where co >1;

  • 相关阅读:
    mongodb根据id获取时间戳
    System.MissingMethodException: 找不到方法:“!!0[] System.Array.Empty()”。
    好片
    分页插入
    linux查看ssl证书到期时间
    oracle复制表结构和表数据
    python的logging 模块的propagate设置
    【转载】 深究强化学习在谷歌芯片布局上的应用
    安全岗春招面经总结
    学历史有什么用——视频分享:學歷史的大用:呂世浩(ShihHao Lu) at TEDxTaipei 2014
  • 原文地址:https://www.cnblogs.com/simpledu/p/15334028.html
Copyright © 2020-2023  润新知