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最小

你可能感兴趣的:(DB2数据表删除重复数据)