Удаление дубликатов в SQL на основе столбца - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь удалить потерянные строки из базы данных.Допустим, у меня есть эта таблица t:

session | name | record_date | uniqueid
1       | a    | 2019-04-03  | 1x
2       | a    | 2019-09-19  | 1x
3       | b    | 2019-08-09  | zr
4       | c    | 2019-09-19  | ww
5       | d    | 2019-09-03  | yy
6       | d    | 2019-09-25  | rr
7       | e    | 2019-09-28  | dd
8       | e    | 2019-04-19  |  

Я пытаюсь удалить дубликаты записей на основе самой старой записи record_date, оценивая как name, так и uniqueid, чтобы убедиться, что они являются реальными дубликатами (а не дубликатами только на основеимя).Уловка для не просто оценки, основанной только на uniqueid, состоит в том, что некоторые строки имеют значение null для uniqueid.Поэтому в моем примере таблицы я хотел бы удалить первую и последнюю строки.

Ответы [ 3 ]

0 голосов
/ 28 сентября 2019

Вы можете попробовать ниже - с агрегацией и group by с предложением где отфильтровать null uniqueid

select name,uniqueid,max(record_date)
from tablename
where uniqueid is not null
group by name,uniqueid
0 голосов
/ 28 сентября 2019

Вы можете использовать delete:

delete from t
    where t.record_date < (select max(t2.record_date)
                           from t t2
                           where t2.name = t.name and
                                 t2.uniqueid = t.uniqueid
                          );

Примечание. Вышеприведенное сохраняет только самые последние записи для имен / уникальных пар.

Если вам нужны уникальные строки в запросе, я бы порекомендовал:

select t.*
from t
where t.record_date = (select max(t2.record_date)
                       from t t2
                       where t2.name = t.name and
                             t2.uniqueid = t.uniqueid
                      );
0 голосов
/ 28 сентября 2019

Я думаю, что вы находите max() и не хотите рассматривать null uniqueid, поэтому используйте где для фильтра нулевые значения

name,max(record_date),uniqueid from table_name
where uniqueid is not null
group by name,uniqueid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...