首先针对开窗函数做一下简单介绍:
开窗函数
Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。
Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。
开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例:
over(order by
f_user_num) 按照f_user_num排序进行累计,order by是个默认的开窗函数
over(partition by
f_user_num)按照f_user_num分区
over(partition by
f_user_num order by
f_shop_card )按照f_user_num分区,并以f_shop_card进行排序
删除重复数据的原理:
1、将原始数据拷贝到一个备份表中。
2、使用开窗函数将数据以重复标识字段进行分区,以其他字段进行排序
3、取其中第1条,并将筛选后的数据放入新表中(该表即为处理之后的数据)
示例如下:
insert into t_1249_target_user
select f_stage_num,
f_user_num,
f_comm_busi,
f_4g_busi,
f_shop_card from (
select t.*,row_number()over(partition by f_user_num order by f_shop_card desc,f_comm_busi desc) rn from t_1249_target_user_his t)
where rn=1;
commit;
select f_stage_num,
f_user_num,
f_comm_busi,
f_4g_busi,
f_shop_card from (
select t.*,row_number()over(partition by f_user_num order by f_shop_card desc,f_comm_busi desc) rn from t_1249_target_user_his t)
where rn=1;
commit;
开窗函数还有很多与其他函数结合使用的方法,有空可以再研究一下。