Поиск дубликатов на основе нескольких столбцов на запись - PullRequest
0 голосов
/ 07 января 2019

Мне нужно извлечь дубликаты (и всегда новые из них) только из одной таблицы. Давайте назовем стол персоны ToCostcenter. Мне нужно найти дубликаты на основе двух столбцов, person_id и costcenter_id.

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

Пример данных

Created               Editor    Person_ID Costcenter_ID
01.01.2019 00:15:15 - A424521 - X00542  - 71341
01.01.2019 00:18:29 - A424521 - X00456  - 71341
01.01.2019 00:19:05 - A424521 - X00410  - 71341
01.01.2019 00:19:07 - A424521 - X01544  - 71341
01.01.2019 00:19:07 - A424521 - X00455  - 71341
01.01.2019 00:20:47 - A424521 - X00879  - 71341
01.01.2019 00:20:58 - A424521 - X00214  - 71341
01.01.2019 00:21:18 - A424521 - X00458  - 71341
01.01.2019 00:23:57 - A424521 - X00542  - 71341
01.01.2019 00:23:59 - A424521 - X00122  - 71341
01.01.2019 00:24:07 - A424521 - X00542  - 71341

Желаемый результат здесь

01.01.2019 00:23:57 - A424521 - X00542  - 71341
01.01.2019 00:24:07 - A424521 - X00542  - 71341

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Для каждого дубликата существует не менее 1 строки с одинаковыми данными:

select * from personsToCostcenter p
where exists (
  select 1 from personsToCostcenter pp
  where
  p.Person_ID = pp.Person_ID
  and
  p.Costcenter_ID = pp.Costcenter_ID
  and
  p.Created > pp.Created
)
0 голосов
/ 07 января 2019

Если created уникально, вы можете использовать EXISTS для фильтрации строк, в которых существует повторяющаяся строка со временем в прошлом.

SELECT *
       FROM personstocostcenter t1
       WHERE EXISTS (SELECT *
                            FROM personstocostcenter t2
                            WHERE t2.person_id = t1.person_id
                                  AND t2.costcenter_id = t1.costcenter_id
                                  AND t2.created < t1.created);
...