我有三张桌子。Diagnose、Patient和PatientDiagnose表如下所示
诊断: uuid、文本、日期
患者: uuid,姓名
PatientDiagnose:患者,诊断
一个患者当然可以有多个诊断,两个患者当然可以有相同的诊断,但这两个诊断在不同的uuids的诊断中是统一的。因此,这两个患者在PatientDiagnose中用他们的患者uuid表示,每个人用那些唯一诊断的uuid表示。
现在我发现我想在我的数据库中修复一些东西。我想删除对患者来说被认为是重复的诊断。重复项是:如果它们属于同一患者,并且具有相同的文本,则在同一年内(在日期使用year函数?)只留下其中一个完整的诊断。
我想删除这些重复项,因为我只想要一个相同文本的诊断pr患者,一年。
我如何在SQL中做到这一点呢?
汤米
发布于 2019-10-22 04:38:54
你说一个诊断应该只针对一个病人。然而,您的数据库不能保证这一点,所以您应该首先解决这个问题。这样就只剩下两个表了:
诊断患者:
一旦您完成了表的转换,您就可以轻松地进行清理:
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)或在手册中查找日期函数。
https://stackoverflow.com/questions/58493608
复制相似问题