SQL 部分字段去重查询

前段时间公司项目遇到一个比较棘手的问题,由于项目是多人合作完成且个别数据表会涉及到多人进行操作导致数据混乱,个别与其他表相关联的字段本该一个数值只出现一次,但由于多人合作,数据较混乱,又不知哪些有用那些没有,不能随便删数据,所以苦恼了好久,各种百度,最终终于查询到了解决办法,现记录如下:

在要删除的有重复数据中存在几种情况:
1.存在两条完全相同的纪录
这是最简单的一种情况,用关键字distinct就可以去掉。
example: select distinct * from table(表名) where (条件)
2.存在部分字段相同的纪录(有主键id即唯一键)
如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组
example:
select * from table where id in (select max(id) from table group by [去除重复的字段名列表,…])
3.没有唯一键ID
example:
select identity(int1,1) as id,* into newtable(临时表) from table
select * from newtable where id in (select max(id) from newtable group by [去除重复的字段名列表,…])

该项目为一个关于银行贷款的项目,借款人在用户端界面填写相关借款信息并提交,银行工作人员通过银行端界面查询到借款人相关信息,通过后台操作更改贷款人借款状态,借款人可在用户端查询每笔贷款的贷款状态等信息。我所遇到的问题就是借款状态所关联的借款表Loan(借款人所查看的借款信息列表)和借款状态表LoanProgress(查询每笔借款所处借款状态)的列表查询问题。下面将项目从简处理以备日后重温查看。

项目中所涉及到的列表:

Loan 借款表

Id借款人/企业id借款人类型借款金额创建人id创建时间修改人id修改时间
10120201009012019-01-038072019-01-17
10230312009012019-01-098032019-01-11
10330115009022019-01-138012019-02-03
1042010109012019-01-108092019-01-29
1053021209082019-01-208012019-02-03

Borrower 借款人表

Id借款人名称
201柯西
202泰勒

BorrowingEnterprise 借款企业表

Id借款企业名称
301兰尼斯特公司
302史达克公司
303克里斯安公司

LoanProgress 借款进度表

Id借款人/企业id借款人类型借款表id借款进度
4013021105审核中
4022010104审核完成
4032020101放款中
4043031102审核完成
4052010104放款中
4063011103审核中
4072020101审核完成
4083021105审核中
4092010104审核完成
4103031102审核完成
4113011103还款中
4123031102审核中
4132010104还款中
4142020101审核完成
4153011103审核完成
4162020101审核中
4173031102放款中
4183011103审核完成

执行SQL语句:

		SELECT 
                t.id,
                t.借款人/企业id
                t.借款人类型
                t.借款金额
                t.创建人id,
                t.创建时间,
                t.修改人id,
                t.修改时间,
       		  ,(	
				select 借款进度 
				from LoanProgress 
				where Id in (select max(Id) from LoanProgress where 借款表id is not null and 借款表id!='' and 借款表id=t.id  group by 借款表id ) )借款进度 
           	   ,(SELECT 借款人名称 FROM Borrower where id = t. 借款人/企业id) 借款人名称 
        	   ,(SELECT 借款企业名称 FROM BorrowingNterprise where id = t.借款人/企业id) 借款企业名称 
          FROM Loan t 
          where  t.创建人='901'

查询结果如下:

Id借款人/企业id借款人类型借款金额创建人id创建时间修改人id修改时间借款进度借款人名称借款企业名称
10120201009012019-01-038072019-01-17审核中泰勒
10230312009012019-01-098032019-01-11放款中克里斯安公司
1042010109012019-01-108092019-01-29还款中柯西

本文为原创文章,仅为个人拙见,如有任何问题或错误欢迎诸位大神多多指教!!

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值