oracle 删除重复数据

delete hpas_index_data_source s
 where s.id in (select id
                  FROM (
                  SELECT t1.*,
                               ROW_NUMBER() OVER(PARTITION BY t1.indexid, t1.doctor_id, t1.start_date, t1.vals ORDER BY t1.rowid) as rn
                          FROM hpas_index_data_source t1
                         where t1.org_id = '1005'
                           and t1.start_date like '2024%'
                           and t1.dept_name like '%全科门诊%'
                           --and t1.doctor_id = '014371'
                           --and t1.indexid = 'IA01019839'
                           )
                 WHERE rn > 1)

关键函数 ROW_NUMBER(): PARTITION BY t1.indexid, t1.doctor_id, t1.start_date, t1.vals:这定义了什么是“重复”。

它将这些字段组合完全相同的记录归为同一个组。

indexid:可能是指标ID(如“门诊人次”、“处方数”)。

doctor_id:医生ID。

start_date:开始日期(通常是数据统计的日期或时段)。

vals:该指标的值。 ORDER BY t1.rowid:在每个分组内,按照Oracle的物理行ID (rowid) 进行排序。

rowid是唯一的,最早插入的数据通常(但不绝对)有更小的rowid。这意味着每个分组内rowid最小的那条记录会被标记为rn=1。

posted @ 2025-09-18 17:22  iamwhy  阅读(2)  评论(0)    收藏  举报