SQL запрос на удаление повторяющихся строк - PullRequest
0 голосов
/ 21 октября 2019

У меня есть три таблицы. Диагностика, диагноз пациента и пациента Таблицы выглядят следующим образом

Диагноз: uuid, текст, дата

Пациент: uuid, имя

PatientDiagnose: пациенту, диагностика

У одного пациента, конечно, может быть несколько диагнозов, и у двух пациентов, конечно, может быть один и тот же диагноз, но два диагноза представлены в Диагностике с разными значениями uuid. Поэтому два пациента представлены в PatientDiagnose с их uuids пациента, а каждый с уникальным uuid диагноза.

Теперь я обнаружил, что хотел бы что-то исправить в моей БД. Я хотел бы удалить диагнозы, которые считаются дубликатами для пациента. Дубликаты: если они принадлежат одному и тому же пациенту и имеют один и тот же текст, в течение одного года (использование функции года на дату?) И оставляют без изменений только один из этих диагнозов.

Я хотел бы удалить этидубликаты, так как мне нужен только один пациент для диагностики с тем же текстом, год.

Как я могу это сделать в SQL?

Томми

1 Ответ

0 голосов
/ 21 октября 2019

Вы говорите, что диагноз должен относиться точно к одному пациенту. Однако ваша база данных не гарантирует этого, поэтому вам следует сначала решить эту проблему. Это оставило бы вас только с двумя таблицами:

  • Пациент: пациенту, имя
  • Диагноз: диагнозу, текст, дата, пациенту

Как только выЕсли вы преобразовали ваши таблицы таким образом, вы можете легко выполнить очистку:

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
);

Вы не упомянули, какую СУБД вы используете. Возможно, не функция YEAR. В этом случае попробуйте EXTRACT(YEAR FROM date) или посмотрите функции даты в вашем руководстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...