博客园 首页 联系 订阅 管理

累积去重计算建模:

由于每个月公司顾客都会买商品,而现在公司需要按月统计累计活跃顾客数(从历史累积到当月的),及:顾客A,B,C在1月购买了商品,顾客A,B,D,E,F在2月购买了商品,顾客A,G在3月购买了商品,那么每个月的活跃顾客数为:1月3个,2月6个,三月7个。

模型如下:

create table edw1_stat.tmp_oxd_test(Tid int,Tname nvarchar2(20))

插入数据得:

 

目标结果集为:

主要代码如下:

(1)

SELECT tid,

        tname,

       row_number() over(PARTITION BY tname ORDER BY tid) AS seq

  FROM edw1_stat.tmp_oxd_test

 GROUP BY tid, tname

得到结果为:

(2)取seq=1的结果集 sql为:

SELECT *

  FROM (SELECT tid,

               tname,

               row_number() over(PARTITION BY tname ORDER BY tid) AS seq

          FROM edw1_stat.tmp_oxd_test

         GROUP BY tid, tname)

 WHERE seq = 1

结果为:

(3)

SELECT tid, COUNT(tname) over(ORDER BY tid)

  FROM (SELECT *

          FROM (SELECT tid,

                       tname,

                       row_number() over(PARTITION BY tname ORDER BY tid) AS seq

                  FROM edw1_stat.tmp_oxd_test

                 GROUP BY tid, tname)

         WHERE seq = 1)

得到结果集为:

4)去重即可得出数据

SELECT DISTINCT tid, COUNT(tname) over(ORDER BY tid)

  FROM (SELECT *

          FROM (SELECT tid,

                       tname,

                       row_number() over(PARTITION BY tname ORDER BY tid) AS seq

                  FROM edw1_stat.tmp_oxd_test

                 GROUP BY tid, tname)

         WHERE seq = 1)