我有三个桌子。 诊断,患者和患者诊断 桌子看起来像这样
诊断: uuid,文本,日期
患者: uuid,名称
PatientDiagnose: 病人,诊断
一个患者当然可以有多个诊断,而两个患者当然可以具有相同的诊断,但是在诊断中唯一代表两个uuid的是两种诊断。因此,在PatientDiagnose中代表这两个患者的患者uuid,每个患者具有唯一的诊断uuid。
现在,我发现我想修复数据库中的某些内容。我想删除被认为对患者重复的诊断。重复项是:如果它们属于同一患者,并且在同一年内具有相同的文本(在日期上使用年份功能?),并且仅保留其中一项诊断。
我想删除这些重复项,因为我只希望一位诊断相同文本的患者,一年。
如何在SQL中做到这一点?
汤米
答案 0 :(得分:0)
您说,诊断应仅指一名患者。但是,数据库不能保证这一点,因此您应该首先解决该问题。那将只剩下两个表:
这样就转换了表格后,就可以轻松进行清理:
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)
或在手册中查找日期函数。