累积去重计算建模:
由于每个月公司顾客都会买商品,而现在公司需要按月统计累计活跃顾客数(从历史累积到当月的),及:顾客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)

浙公网安备 33010602011771号