在面试一些数据开发岗位时,sql笔试题必不可少,其中有一道经典的笔试题。如下
连续登陆7天以上的用户
下表数据为去重后的数据,粒度为天、人。即每天登录多次也只有一条数据
直接上结果,采用hivesql
大体思路是取到每一条对应的前面第7条的日期,相减后如果为6,则表明该条已经连续7天登录。然后在进行去重即可得到连续登录7天以上的用户
select
distinct id
from
(
select
id
, dte
, lag(dte, 6, null) over(partition by id order by dte) as lag_dte
from tbl t
) t
where datediff(dte, lag_dte) = 6
另外一种解法,可以参考【SQL】查询连续登陆7天以上的用户 - kww - 博客园