Как создать поле последовательности, равное для дубликатов и уникальное только для уникальных строк?

#sql #sql-server #tsql #etl #data-warehouse

#sql #sql-сервер #tsql #etl #хранилище данных

Вопрос:

Я извлекаю данные из нескольких баз данных и хочу отслеживать повторяющиеся записи, не удаляя их. Мое решение — создать новое поле последовательности, где строки помечены как повторяющиеся, имея одинаковый порядковый номер. Имейте в виду, что не все столбцы должны быть равными, чтобы считаться дубликатами.

Как мне это сделать? Моя цель — сохранить эту таблицу со всеми неповрежденными повторяющимися записями и, наконец, другую таблицу, в которой у меня были бы уникальные записи только путем объединения записей с одинаковым идентификатором последовательности.

Комментарии:

1. Не уверен, что я понял.

2. Вы можете RANK() создавать свои записи по любым необходимым вам числовым критериям и использовать результат как [идентификатор последовательности].

3. Вам не обязательно ранжировать их вообще, чтобы выбрать конкретную строку, которая дублирует идентификатор последовательности, но это будет зависеть от вашего критерия для их объединения, существует ли «самая последняя версия идентификатора последовательности» или другой критерий, по которому вы бы выбрали конкретный дубликат для отображения в удаленной таблице?

4. Как работает это волшебное слияние, когда «не все столбцы должны быть равны, чтобы считаться дубликатом».

Ответ №1:

Попробуйте это:

 select t.*, Sequence_ID=DENSE_RANK() over (
                order by <fields_you_want_to_test_for_uniqueness>
            )
from <your_table> t
  

Обратите внимание, что DENSE_RANK() выдает идентичные значения для «связи», но также выдает последовательные числа (например 1, 2, 3, 3, 4), в то время как RANK () выдает вам то же значение для «связи», но затем пропускает числа (например 1, 2, 3, 3, 5). Выберите то, что соответствует вашим потребностям.