欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

1. 常规指标总结----连续性指标案例

程序员文章站 2022-05-01 19:49:24
举例:连续三周活跃其实最简单的实现方式就是,三个子查询,然后直接join。这里我们运用另外一种方式,采用了,union all 的方式进行拼接,那么join与union all,有什么本质区别呢?他们最大的区别就是,join属于横向拼接,而union all 属于纵向拼接。就好比什么呢?就好比有人问,where与having的区别是一个道理,where是过滤原始数据的一个一个的行,而having是过滤分完组的那个组是一个道理,各有各的用处。直接上代码。insert into table ads_...

举例:连续三周活跃

其实最简单的实现方式就是,三个子查询,然后直接join。

这里我们运用另外一种方式,采用了,union all 的方式进行拼接,那么join与union all,有什么本质区别呢?他们最大的区别就是,join属于横向拼接,而union all 属于纵向拼接。就好比什么呢?就好比有人问,where与having的区别是一个道理,where是过滤原始数据的一个一个的行,而having是过滤分完组的那个组是一个道理,各有各的用处。
直接上代码。

insert into table ads_continuity_wk_count
select
    '2020-06-25',
    concat(date_add(next_day('2020-06-25','MO'),-7*3),'_',date_add(next_day('2020-06-25','MO'),-1)),
    count(*)
from (
    select
        mid_id
    from
(
        --求本周活跃
        select
            mid_id
        from dws_uv_detail_daycount
        where dt >= date_add(next_day('2020-06-25','monday'),-7) --本周一
        and dt <= date_add(next_day('2020-06-25','monday'),-1) --本周日
        group by mid_id --对设备去重,一个设备在一周之内最多出现一次。

        union all

        --上周活跃
        select
            mid_id
        from dws_uv_detail_daycount
        where dt >=date_add(next_day('2020-06-25','monday'),-7*2)
        and dt <=date_add(next_day('2020-06-25','monday'),-7-1)
        group by mid_id 

        union all

        --上上周活跃
        select
            mid_id
        from dws_uv_detail_daycount
        where dt>=date_add(next_day('2020-06-25','monday'),-7*3)
        and dt <=date_add(next_day('2020-06-25','monday'),-7*2-1)
        group by mid_id
)t1
group by mid_id
having count(*) = 3
)t2;

拼接完毕之后,按照设备ID,进行分组。过滤条件:count=3,这样的设备,就是连续三周的活跃设备。
count的时候对每个设备ID都进行count,因为我们是按照设备ID进行分组操作,所以count
=3的,就是连续三周出现的。**

本文地址:https://blog.csdn.net/weixin_45284133/article/details/108974187