delete hpas_index_data_source swhere s.id in (select idFROM (SELECT t1.*,ROW_NUMBER() OVER(PARTITION BY t1.indexid, t1.doctor_id, t1.start_date, t1.vals ORDER BY t1.rowid) as rnFROM hpas_index_data_source t1where 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。