注册 登录
编程论坛 MySQL论坛

mysql 如何根据条件删除重复行

小样的天空 发布于 2022-08-29 15:02, 940 次点击
我有一个表,表中有3列,列1 为case,列2 为 FDA_DT, 列3为 ISR. 我想对表进行去重,去重条件:对于具有相同CASE号的报告,选取FDA_DT值最新,即上报日期最新的报告;其次,对于CASE号和FDA_DT日期数据均相同的不良事件报告,选取ISR值最大的报告。
2 回复
#2
csy1102022-10-12 10:40
程序代码:
select * from accpet

insert into accpet values('2','20221010','11')
insert into accpet values('3','20221015','11')
insert into accpet values('2','20221012','15')
insert into accpet values('2','20221010','14')

--以上面的数据为例,对于表aa的记录进行扫描,
--
对于其中任一条记录,查询相同表中相同CASE的记录,查找其中是否存在FDA_DT>另一条FDA_DT的记录,如存在,扫描到的记录即不符合条件,
--
如不存在,即扫描到的记录符合where的条件,将作为查询结果.
--
第二个去重条件同理。
--
注:内嵌的那条not EXISTS条件用小于是因为外部还有一个not EXISTS。
select aa.* from accpet aa where
not EXISTS (select 1 from accpet bb where bb.icase=aa.icase and bb.FDA_DT>aa.FDA_DT
and not EXISTS (select 1 from accpet cc where cc.icase=aa.icase and  cc.FDA_DT=aa.FDA_DT and cc.ISR<aa.ISR))
#3
csy1102022-10-12 10:41
回复 楼主 小样的天空
代码还有哪里不理解可以问我
1