前提条件与需求
主表: ag_ba_old_base
从表: AG_BA_OLD_MEDICAL
字典表: jz_dictionary
在从表中有ag_ba_old_base_id 这个字段是和主表关联的,但是由于各种各样的原因导致从表中有很多重复数据,我们需要从中筛选出同样ag_ba_old_base_id 中 最新的更新日期 ,如果没有更新日期那么用id来比较,id比较大的优先留着。
如下图
select t.ag_ba_old_base_id ,count(id) from AG_BA_OLD_MEDICAL t where t.create_date is not null
group by t.ag_ba_old_base_id
having count(id) >3
实际上重复两次和三次的也很多 这里只是为了演示一下重复数据
我们找一个重复次数比较多的数据来看
select t.id,t.ag_ba_old_base_id,t.create_date
from AG_BA_OLD_MEDICAL t
where ag_ba_old_base_id = 81904287
order by t.ag_ba_old_base_id,t.create_date desc,t.id desc
这里我们可以看到重复数据之间的区别是 create_date 和此表类似于主键的id(之所以这么说是因为此表非常不规范 不能按照主键处理),而且接到任务时被告知这表中可能存在id小但是create 但是create_date 更新的情况。所以在筛选时不能单单利用max()函数来直接分组查询,这给这次查询增加了一点难度。但是