Oracle删除重复数据

需求:删除table_name表中的重复数据;判定重复的标准为:item_1,item_2,item_3的值一样,保留最新的一条

BEGIN
  LOOP
    --手动开启本次会话的并行
    ALTER SESSION ENABLE PARALLEL DML;
    --删除分组后重复数据中ROWID最小的数据
    DELETE /*+ PARALLEL(8) */ FROM TABLE_NAME WHERE ROWID IN(
    SELECT /*+ PARALLEL(8) */ MIN(ROWID) FROM TABLE_NAME A
    GROUP BY A.ITEM_1,A.ITEM_2,A.ITEM_3
    HAVING COUNT(*)>1
   );
   COMMIT;
   --手动关闭本次会话的并行
   ALTER SESSION DIABLE PARALLEL DML;
   --如受影响行数等于0,则结束循环
   EXIT WHEN SQL%ROWCOUNT=0;
  END LOOP;
END;

以上逻辑是重复数据中留下ROWID最大的那条,如需要指定留下哪一条可参考如下:留下CREATE_TIME最新的一条 read more

Oracle创建表分区

1.建表时创建分区

CREATE TABLE TABLE_NAME
(
ID VARCHAR2(64) NOT NULL,
CREATE_TIME DATE NOT NULL
--省略其他字段
)
--根据CREATE_TIME字段按年分区
PARTITION BY RANGE(CREATE_TIME) INTERVAL (NUMTOYMINTERVAL(1,'YEAR'))
(
--创建默认分区,定义初始值为当前时间
PARTITION TABLE_NAME_P1 VALUES LESS THAN (TO_DATE('2019-12-04','YYYY-MM-DD'))
);

2.相关时间计算函数 read more