【问题标题】:Sql query to delete duplicate rowssql查询删除重复行
【发布时间】:2020-02-17 23:23:29
【问题描述】:

我有三张桌子。 诊断、患者和患者诊断 表格是这样的

诊断: uuid,文本,日期

患者: uuid,名称

患者诊断: 患者uuid,诊断uuid

一个患者当然可以有多个诊断,两个患者当然可以有相同的诊断,但是这两个诊断在 Diagnose 中以不同的 uuid 唯一表示。因此,这两个患者在 PatientDiagnose 中使用他们的患者 uuid 表示,并且每个患者都使用那些唯一的诊断 uuid。

现在我发现我想在我的数据库中修复一些东西。我想删除被视为患者重复的诊断。重复项是:如果它们属于同一患者并且具有相同的文本,则在同一年内(在日期上使用年份功能?)并且只保留其中一个诊断。

我想删除这些重复项,因为我只想要一个诊断相同文本的 pr 患者,一年。

如何在 SQL 中做到这一点?

汤米

【问题讨论】:

  • 请用您正在使用的数据库标记您的问题。此外,请以 表格 文本的形式提供示例数据和预期结果,并向我们展示到目前为止您是如何尝试自己解决问题的。
  • 希望他们中没有人患有断臂断腿这两个诊断...另外,删除所有具有相同uuid和相同文本且日期相同的记录...翻译这个在 sql 中,你应该很高兴。
  • MySQL 还是 SQL Server?
  • 数据库是什么?
  • 请制作一个 SQL Fiddle? sqlfiddle.com

标签: sql duplicates rows


【解决方案1】:

您说诊断应仅针对一名患者。但是,您的数据库不能保证这一点,因此您应该首先解决该问题。那将只剩下两张桌子:

  • 患者:患者uuid,姓名
  • 诊断:diagnoseuuid、文本、日期、患者uuid

这样转换表格后,您可以轻松地进行清理:

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) 或在您的手册中查找日期函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 2014-07-03
    • 1970-01-01
    相关资源
    最近更新 更多