上海isp 发表于 2016-11-15 08:07:37

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]
查看完整版本: DB2表删除重复数据