DB2去重的几种方法

有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

例如下表:table1

用户办理套餐的记录表,可看出,user_id=33333有两条完全重复的记录,user_id=11111的tc_name和open_date不一样

1、对于完全重复的记录,直接使用distinct 即可

select

distinct user_id,name,tc_name,open_date

from

table1

可得到如下结果:

可以看出,完全重复的记录已经只剩下唯一的一条,但是部分重复的记录该方法无效

2、对于完全重复的记录,还可以使用group by

select 
        user_id,name,tc_name,open_date
from
        table1
group by
        user_id,name,tc_name,open_date

结果和上图一致,即:

该方法也只对完全重复的记录有效

3、row_number()over() 分等级之后限定 row=1

select 
        user_id,name,tc_name,open_date
from

    select 
          user_id,name,tc_name,open_date
         ,row_number()over(partition by user_id order by open_date desc) as row
   from
         table1
)
where row=1

该方法得到的结果如下:

该方法不仅除掉了完全重复的记录,而且还除掉了不完全重复的记录,对open_date进行排等级,按照开通日期的倒序排列,且取出第一条记录,即开通时间最近的记录

4、max等聚合函数

select 
       user_id,name,max(tc_name),max(open_date)
from
       table1
group by
        user_id,name

该方法得出的结果如下,对完全重复记录和部分重复记录都有效,注:部分重复的记录要对所有重复字段使用max或min等才有效

那么在公司的sql语句

select ROW_NUMBER() OVER(ORDER BY max(r.inTime) deSC) AS RN,
r.tradeNo,max(r.orderId) as orderId,max(r.orderDate) as orderDate,max(r.merId) as merId,max(r.orderState) as orderState,
max(r.amount) as amount,max(r.origAmt) as origAmt,max(r.inTime) as inTime,max(r.modTime) as modTime,max(r.splitState) as splitState,
max(r.splitType) as splitType,max(r.splitcategory) as splitcategory,max(p.mainTradeNo) as mainTradeNo,
max(p.merId) as merIdSon,max(p.orderId) as orderIdSon
from UMPAY.T_PAYORDER_1707 as r left join UMPAY.T_PORDER_SPLIT_SUB_1707 as p
on r.tradeNo=p.mainTradeNo
where 1 = 1 and r.orderDate BETWEEN '20170720' and '20170721'
group by r.tradeNo

对应的要在查询总体数量的时候也得去重

select count(distinct(r.tradeNo))
from $splitPayorderTableName$ as r left join $splitPorderSUBTableName$ as p on r.tradeNo=p.mainTradeNo
where 1 = 1

 参考链接:http://www.cnblogs.com/xuena/p/3912234.html

DB2去重复的几种方法的更多相关文章

  1. c++类成员函数重载常量与非常量版本时避免代码重复的一种方法

    c++有时候需要为类的某个成员函数重载常量与非常量的版本,定义常量版本是为了保证该函数可作用于常量类对象上,并防止函数改动对象内容.但有时两个版本的函数仅仅是在返回的类型不同,而在返回前做了大量相同的 ...

  2. Sql Server删除数据表中重复记录 三种方法

    本文介绍了Sql Server数据库中删除数据表中重复记录的方法. [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1 ...

  3. ORACLE查询删除重复记录三种方法

    本文列举了3种删除重复记录的方法,分别是rowid.group by和distinct,小伙伴们可以参考一下.   比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完 ...

  4. js判断数组中是否有重复值得三种方法

    方法一: var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace( ...

  5. sql去除重复的几种方法

    所以用这样一句SQL就可以去掉重复项了: select * from msg group by terminal_id; SQL中distinct的用法(四种示例分析) 示例1 select dist ...

  6. jquery validate ajax 验证重复的2种方法

    转载自:http://blog.51yip.com/jsjquery/1484.html jquery validate 经过这种多年的改良,已经很完善了.它能满足80%的验证需要,如果validat ...

  7. List集合对象去重及按属性去重的8种方法-java基础总结系列第六篇

    最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大.基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华.所以我更想把java ...

  8. js数组和字符串去重复几种方法

    js数组去重复几种方法 第一种:也是最笨的吧. Array.prototype.unique1 = function () { var r = new Array(); label:for(var i ...

  9. VS开发中的代码编写小技巧——避免重复代码编写的几种方法

    上一篇文章中程序员的幸福生活--有你的日子,每天都是情人节,收到了大家的很多好评.鼓励和祝福,非常感动,真诚的谢谢大家.也希望每个朋友都能保持一个积极向上的心态,去迎接丰富多彩的人生. 在开发过程中, ...

随机推荐

  1. 基于Ace Admin 的菜单栏实现

    1.首先是数据库表必然包含以下几个字段Id ,ParnetId,Url,Name等 create table dbo.Module ( Id uniqueidentifier not null con ...

  2. vs code进行c/c++开发

    vs code是微软公司开发的跨平台编辑器,丰富的插件功能可以满足各种编程语言的编码,编译和调试.由于vs code本身只是一个编辑器,所以你需要准备编译工具链.本文针对的是windows系统,我这里 ...

  3. 添加节点至XML文档中去

    不管是<怎样创建XML文档> http://www.cnblogs.com/insus/p/3276944.html还是<泛型List<T>转存为XML文档> ht ...

  4. The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

    刚才Insus.NET有尝试改一段代码,是让用户能动态变更网页背景图片的小功能.当Insus.NET去执行铵钮Click事件时,它却出现标题的错误.代码是这样的: 此代码,原本是没有什么问题的,但现在 ...

  5. JDK Linux下安装

    下载jdk-6u45-linux-x64.bin到/root目录下执行./jdk-6u45-linux-x64.bin 会在/root目录下生成 jdk1.6.0_45 文件 之后配置环境变量 编辑/ ...

  6. Ubuntu 如何为 XMind 添加快速启动方式和图标

    目录 Ubuntu 如何为 XMind 添加快速启动方式和图标 Ubuntu 如何为 XMind 添加快速启动方式和图标 按照教程Ubuntu16.04LTS安装XMind8并创建运行图标进行Xmin ...

  7. 基于XML的类的属性的装配

    基于XML的属性装配 1.手动装配 <!-- 属性的装配:手动装配 --> <bean id="userService" class="com.neue ...

  8. 【STL基础】deque

    deque (double-ended queue) 构造函数: //default: deque<T> d; //空的vector //fill: deque<T> d(n) ...

  9. 老男孩python作业3-购物车程序优化

    购物车优化要求:用户入口: 1.商品信息存在文件里 2.已购商品,余额记录.第一次启动程序时需要记录工资,第二次启动程序时谈出上次余额 3.允许用户根据商品编号购买商品 4.用户选择商品后,检测是否够 ...

  10. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_方法执行

    [前言] 方法执行前,CLR 会检测方法内代码引用的所有类型.同时 CLR 会分配一个内部数据结构,用来管理对所有引用的类型的访问. 首次执行方法时,托管程序集会把 IL 转换成本地 CPU 指令,并 ...