筛选重复数据

      现在有这个一个需求:将黑名单(app_black)和逾期客户管理(app_yq_customer)两张数据表的数据导出来.其app_yq_customer

没有主键,有大量重复数据,并且两张表之间也可能有重复数据。先要求:导出数据不能重复,身份证号码相同的按警告级别高的导出,身份证号码相同的按警告级别也相同的则按修改时间最新的导出。

     大致有这么几个方案:1。直接写sql语句把要用的数据筛选出来。2。新建一个临时表,先将两张表的数据放入临时表,然后筛选。

3。查询所有数据,在程序端处理。

    方案1,方案2 都是同一个难点--sql 写不出来....(有点难度。。。有时间可以再试试)。

    方案3. 经测试datarow.delete() 在datatable.AcceptChanges()之前是不会改变行的排列的,只是将   datarow的状态标记成deleted.

现方案如下:将数据从数据库取出按身份证,警告级别,修改时间排序。这样我们需要的数据就都排在相同身份证的第一行。

strSql="select * from (select n.hf_id,n.acc_name,n.warn_level,n.risk_code,replace(n.remark,chr(13)||chr(10),' '),"
      +" n.input_date,n.input_person,n.fundaccount from app_black n where n.warn_level <> 2 and n.risk_code is not null"
      +" union all"
      +" select b.yq_idcard,b.yq_name,b.yq_warning_level,b.risk_code,'',"
      +" b.yq_importdate,b.yq_op_id,b.fundaccount from app_yq_customer b where b.yq_warning_level<>4 and b.risk_code is not null) order by hf_id,warn_level desc,input_date desc";

 

特别注意:datatable 删除数据我们一般从后往前删,这样就不会破坏还没有检索的数据。(我在从前面往后面删的时候发现datatable 里面的数据全乱了。。。)

 

 for(int i=dt.Rows.Count-1;i>0;i--)
   {
   string curr=dt.Rows[i][0].ToString();
   string pre=dt.Rows[i-1][0].ToString();
    if(curr==pre)
    {
     dt.Rows[i].Delete();
    }

   }

dt.AcceptChanges();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值