1	123	2018-08-02
2	123	2018-08-03
3	123	2018-08-04
4	456	2018-11-02
5	456	2018-12-09
6	789	2018-01-01
7	789	2018-04-23
8	789	2018-09-10
9	789	2018-09-11
10	789	2018-09-12
create table day_3(
    id int,
    user_id int,
    login_date String
)
row format delimited fields terminated by '\t';

load data local inpath '/usr/hdk/data/day3.txt' into table day_3;
SELECT
    user_id,
    count(1) cnt
FROM
    (SELECT 
        user_id, 
        login_date, 
        row_number() over ( PARTITION BY user_id ORDER BY login_date) rn
    FROM 
        day_3
    )t 
GROUP BY
    user_id,
    date_sub ( login_date, t.rn ) 
HAVING
    count( 1 ) >= 3 
ORDER BY
    user_id
;
  1. 按照ID分组,日期排序,获得每个日期在组内的序号。
  2. 用当前日期减去序号,如果用户是连续登陆的,那么结果的值必然相等。
user_idlogin_daternflag_date
7892018-01-0112017-12-31
7892018-04-2322018-04-21
7892018-09-1032018-09-07
7892018-09-1142018-09-07
7892018-09-1252018-09-07

3.然后再次按照user_id和flag_date(data_sub ( login_date, t.rn ) )分组,如果重复项大于等于三,就表示有连续三天登陆。
4.如果想要最近三天登陆,只需要将最近三天的数据导出然后运行此SQL。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐