连续两天登录:tomorrow = nextLogin,说明第二天也登录,连续登录两天
-- 1.在hive中创建表,并加载原始数据createtable pratics2(
username string,
longinstr string
)row format delimited fieldsterminatedby',';loaddatalocal inpath '/export/datas/pratics2.txt'intotable pratics2;-- 2.用SQL语句对表进行分析得到期望结果select
a.username
from(select username,
longinstr,
date_add(longinstr,1)as tomorrow,--这是登录第二天的日期
lead(longinstr,1,0)over(partitionby username orderby longinstr)as next_login --这是下一次登录的时间from pratics2) a
where a.tomorrow = a.next_login
groupby a.username;+-----------+-------------+-------------+-------------+--+| username | longinstr | tomorrow | nextlogin |+-----------+-------------+-------------+-------------+--+| A |2019-08-22|2019-08-23|2019-08-23|| A |2019-08-23|2019-08-24|2019-08-24|| A |2019-08-24|2019-08-25|0|| B |2019-08-22|2019-08-23|2019-08-24|| B |2019-08-24|2019-08-25|0|| C |2019-08-22|2019-08-23|2019-08-23|| C |2019-08-23|2019-08-24|0|+-----------+-------------+-------------+-------------+--+
连续3天登录:A
--连续3天登录:Aselect
username,
longinstr,
date_add(longinstr,2)as tomorrow,--这是登录日期后两天
lead(longinstr,2,0)over(partitionby username orderby longinstr)as nextLogin --这是下下一次登录的时间from
pratics2;+-----------+-------------+-------------+-------------+--+| username | longinstr | tomorrow | nextlogin |+-----------+-------------+-------------+-------------+--+| A |2019-08-22|2019-08-24|2019-08-24|| A |2019-08-23|2019-08-25|0|| A |2019-08-24|2019-08-26|0|| B |2019-08-22|2019-08-24|0|| B |2019-08-24|2019-08-26|0|| C |2019-08-22|2019-08-24|0|| C |2019-08-23|2019-08-25|0|+-----------+-------------+-------------+-------------+--+