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
1194881
1194892
1194903
表示有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最小
页:
[1]