我是靠谱客的博主 欢喜睫毛膏,最近开发中收集的这篇文章主要介绍数仓体系——最近七天内连续三天活跃用户数方法1-通过连续日期排名方法2-通过开窗函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

方法1-通过连续日期排名

首先我们筛选出最近七天的每日数据,属于每日设备行为,也就是说一条数据等于一次活跃
在这里插入图片描述
这一步对每日设备行为去重(正常情况下不写也可以,因为每日设备 行为理论上来说是已经去过重的)
然后再通过rank函数对每个日期后面都加一个数
在这里插入图片描述
逻辑是我们按照日期排序,那么如果是连续日期那么减去后面的数应该得到的值相等

6.15 1
6.16 2
6.17 3
这样每个日期减去自己的rank排名得到的都是6.14,再通过对这个减去得到的日期group by,如果count(*)为3,则三天连续

		select
        mid_id
        from
        (
            select
                mid_id,
                date_add(dt,-rk) rk2
            from
            (
                select
                mid_id,
                dt,
                rank() over(partition by mid_id order by dt) rk
                from
                (
                    select
                        mid_id,
                        dt
                    from dws_uv_detail_daycount
                    where dt >= date_add('2020-06-25',-6)
                    group by mid_id,dt
                )t1
            )t2
        )t3
        group by mid_id,rk2
        having count(*) >= 3 

这样我们就筛选出连续三天活跃的用户了,但是有一种特殊情况是它在一周的前三天连续活跃,第四天不活跃,之后三天又活跃。这样的话它的数值可以假设为
6.15 1
6.16 2
6.17 3
6.19 4
6.20 5
6.21 6
则它最终得到count(*)为3的分组为两组6.14和6.15;但它其实都是一个用户,所以我们要在上述代码外面再套一层group by mid_id
最终代码如下

select
    '2020-06-25',
    concat(date_add('2020-06-25',-6),'_','2020-06-25'),
    count(*)
from
(
    select
        mid_id
    from
    (
        select
        mid_id
        from
        (
            select
                mid_id,
                date_add(dt,-rk) rk2
            from
            (
                select
                mid_id,
                dt,
                rank() over(partition by mid_id order by dt) rk
                from
                (
                    select
                        mid_id,
                        dt
                    from dws_uv_detail_daycount
                    where dt >= date_add('2020-06-25',-6)
                    group by mid_id,dt
                )t1
            )t2
        )t3
        group by mid_id,rk2
        having count(*) >= 3
    )t4
    group by mid_id
)t5;

方法2-通过开窗函数

还是先筛选出一周的数据
在这里插入图片描述
对于每个用户的日期后面都加一个字段,这个字段是这个用户的日期的下两行的日期,比如用户a,的dt这一列有6.15,6.17,6.18dt数据,则在a,6.15后面再拼一个6.15下面两行的数据也就是6.18。如果下两行没数据就给9999,如下
在这里插入图片描述
然后再开窗,通过用户分类,dt排序
在这里插入图片描述
然后通过datediff函数找到lead2_dt减去原本dt为2的数据(就类似于6.15,6.16,6.17,这种6.17减去6.15就为2,则三天连续),再去重在这里插入图片描述

最后

以上就是欢喜睫毛膏为你收集整理的数仓体系——最近七天内连续三天活跃用户数方法1-通过连续日期排名方法2-通过开窗函数的全部内容,希望文章能够帮你解决数仓体系——最近七天内连续三天活跃用户数方法1-通过连续日期排名方法2-通过开窗函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部