Надеюсь, вы можете мне помочь.Удаление дубликатов в SQL Server 2012 путем группировки данных с несколькими правилами
У меня есть таблица данных в базе данных SQL (таблица 1), которая содержит информацию в 5 столбцах (1,2,3,4,5).
Я требую запроса, который выполняет следующие действия:
- Некоторые из этих строк могут быть продублированы и эти дубликаты должны быть удалены.
- Некоторые из этих строк могут иметь один и тот же ключ, сгенерированный объединением столбцов 1,2,3, но разными данными в столбцах в 4 и 5. Правило выглядит следующим образом: сохраняйте данные с наибольшим количеством дубликатов, и если есть равное количество дубликатов (один набор дубликатов, т. е. две строки, где 1,2,3 одинаковы, и 4 & 5 отличаются), сохраните последнюю, недавно введенную в систему (то есть верхнюю часть списка DESC).
Например:
1,2,3,4,5
а, а, а, б, б
а, а, а, б, б
a, a, b, c
Здесь мы сохраним только вторую строку - 'a, a, a, b, b', поскольку есть две из этих дублированных строк и одна из других, 'а, а, а, б, в. Если бы существовали две повторяющиеся строки обоих типов данных, мы бы сохранили последнее последнее (a, a, a, b, c).
Я пытаюсь решить эту проблему с помощью комбинации RANK(), ROW_NUMBER() и COUNT() без успеха, поскольку я относительно не знаком с SQL. Я использую комбинацию из следующих потоков:
how to select the most frequently appearing values?
Select first row in each GROUP BY group?
SQL Query Select first rank 1 row From Multiple ranks/Group
Я надеюсь, что это объяснение было ясно.
Спасибо за чтение!
Спасибо, это удаляет дубликаты, но не отвечает второе правило - если есть два набора повторяющихся строк (т. е. 4 строки, два дублируются), запрос должен выбрать только самую последнюю строку для ввода. Этот скрипт просто выбирает первый в заказе, а не наиболее часто повторяющийся элемент. – stax1001