• sql脚本-维护一张表中的数据,按照保单号,将最近生成的数据删除掉,只保留之前生成的数据


    最近在项目中遇到这样一个问题

    运行sql语句:select a.contno from LIS_BUSI_TRANSACTIONS a where 1=1 and a.ruleid='16' group by a.contno having count(a.contno)>1

    这条sql语句的意思是能够查询出来有多少张保单是存在重复数据。

    现在的需求是将有重复的数据按照保单号进行分组,只要最先产生的那一条数据。

    现在要做的事,我要写一个sql脚本对这张表中的数据进行维护:

    思路:想:一条sql是肯定是办不成事的,需要借助于中间表,基本做法是:先将自己要保留的数据保存到中间表中,然后后将将有问题的数据删除掉,将中间表的数据保存到原表中,最后,再将借助的中间表删除掉就可以了,(其实中间表不删掉也是可以的,留一个备份也是不错的选择的,毕竟在实际项目中数据是不能随随便便的删除)。

    sql脚本如下:

    create table temp_lis_busi_transactions_a as
    ( SELECT min(sid) as sid,contno FROM lis_busi_transactions where invoiceflag = '00' and successflag = '1' and sum_total > 0 and contno in (select distinct contno from lis_busi_transactions where 1 = 1 and invoiceflag = '00' and successflag = '1' and sum_total > 0 group by contno having count(contno) > 1) /* and rownum=1*/ group by contno );

    create table temp_lis_busi_transactions_b as select * from lis_busi_transactions where 1=2;

    insert into temp_lis_busi_transactions_b
    select * from lis_busi_transactions where sid in(
    select sid from temp_lis_busi_transactions_a);

    delete from lis_busi_transactions where invoiceflag='00' and successflag='1' and sum_total>0;
    insert into lis_busi_transactions select * from temp_lis_busi_transactions_b;
    drop table temp_lis_busi_transactions_a;
    drop table temp_lis_busi_transactions_b;

  • 相关阅读:
    样本间相似度/距离的计算方法总结
    package.json字段全解
    使用Charles对Https请求进行抓包
    URI和URL的区别
    webstorm常用快捷键
    HTML中判断手机是否安装某APP,跳转或下载该应用
    Git 常用命令大全
    vue的测试(Vue.js devtool)
    js求两个数的最大公约数
    javascript实现验证身份证号的有效性并提示
  • 原文地址:https://www.cnblogs.com/dongyaotou/p/12284136.html
Copyright © 2020-2023  润新知