DB2表删除重复数据

--删除数据库中重复的数据:删除后入库的、保存先入库的

DELETE

FROM

    (

        SELECT

            t2.*,

            rownumber() over (partition BY fieldid,TIME,code,height,type)AS rowid

        FROM

            WEATHER_FORECAST_VERYSHORT t2

        WHERE

            1=1

        AND TIME>= CURRENT DATE - 1 MONTHS

        AND TIME< CURRENT DATE + 1 days ) AS t

WHERE

    t.rowid>1

 

说明:

查询表 WEATHER_FORECAST_VERYSHORT 根据字段(fieldid,TIME,code,height,type)来判断该条记录是否重复

如果有重复的数据,数据的rowid 如下

ID      rowid       

119488 1

119489 2

119490 3

表示有3条重复的记录

删除重复记录,则只需要删除rowid>1的即可。

 

该删除会删除后入库的数据,保存闲入库的数据,而很多情况下我们需要保存最新入库的,删除之前入库的数据,该情况可参考下面第二种方式。

 

 

 --删除数据库中重复的数据:删除先入库的,保存后入库的

DELETE

FROM

    WEATHER_FORECAST_VERYSHORT

WHERE

    id in

    (

        SELECT

          id

        FROM

            (

                SELECT

                    MIN(id) AS id,

                    fieldid,

                    code,

                    type,

                    TIME,

                    height,

                    COUNT(type)

                FROM

                    WEATHER_FORECAST_VERYSHORT

                WHERE

                 time>= current date - 1 MONTHS and time< current date + 1 days 

                GROUP BY

                    fieldid,

                    code,

                    type,

                    TIME,

                    height

                HAVING

                    COUNT(type)>1))

说明:

该删除,会删除先入库的数据,保存最新入库的数据。ID是递增的情况下,可以这么使用。

 

不使用in的方法

delete

FROM

   WEATHER_FORECAST_VERYSHORT2 t1

WHERE

   EXISTS

   (

SELECT

  *

FROM

   WEATHER_FORECAST_VERYSHORT2 t2

WHERE

t1.fieldid=t2.fieldid

AND t1.code = t2.code

AND t1.type = t2.type

AND t1.TIME = t2.TIME

AND t1.height = t2.height

AND t1.id < t2.id 

)

 

 

说明:

code、type、time、height等为比较是否数据重复的字段

t1.id<t2.id 保存数据表中重复记录ID最大的数据,反之,保存ID最小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值