我有三个桌子。诊断,患者和患者诊断表格看起来像这样
诊断:uuid,text,date
患者:uuid,名称
PatientDiagnose:病人,诊断
一名患者当然可以有多个诊断,而两名患者当然可以具有相同的诊断,但是在诊断中,唯一的代表是两个诊断具有不同的用法。因此,在PatientDiagnose中,两个患者分别代表其患者的uuid,每个患者都具有唯一的诊断uuid。
现在,我发现我想修复数据库中的某些内容。我想删除被认为对患者重复的诊断。重复项是:如果它们属于同一患者,并且在同一年内具有相同的文本(在日期上使用年份功能?),并且仅保留其中的一种诊断。
我想删除那些重复项,因为我只希望一位诊断相同文本的患者,一年。
如何在SQL中做到这一点?
汤米
您说,诊断应仅指一名患者。但是,数据库不能保证这一点,因此您应该首先解决该问题。那将只剩下两个表:
一旦转换了表,就可以轻松进行清理:
delete from diagnose
where exists
(
select *
from diagnose other
where other.diagnoseuuid < diagnose.diagnoseuuid
and other.text = diagnose.text
and year(other.date) = year(diagnose.date)
and other.patientuuid = diagnose.patientuuid
);
您还没有提到您正在使用哪个DBMS。它可能没有YEAR
功能。在这种情况下,请尝试使用EXTRACT(YEAR FROM date)
或在手册中查找日期功能。