Удалить дубликаты на основе сортировки - PullRequest
0 голосов
/ 14 октября 2019

У меня есть таблица клиентов с идентификаторами и некоторыми столбцами даты и времени. Но эти идентификаторы имеют дубликаты, и я просто хочу проанализировать различные значения идентификаторов. Я пытался использовать групповой, но это делает процесс очень медленным. Из-за чувствительности данных не может поделиться им. Любые предложения будут полезны.

Ответы [ 2 ]

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

Вы также можете просто отсортировать столбцы по столбцу даты, а затем щелкнуть по столбцу идентификатора и удалить дубликаты ...

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

Я бы предложил использовать ROW_NUMBER (). Это позволит вам ранжировать строки по выбранным столбцам и затем выбрать первый результат.

Если вы не указали ни данных, ни имен таблиц и столбцов,Пример на основе базы данных Adventureworks. Техника будет той же: вы делите то, что делает группу строк, которую вы хотите дедуплицировать, уникальной (ProductKey ниже) и упорядочиваете таким образом, чтобы версия, которую вы хотите сохранить первой (Children, birthdate и customerkey в моем примере).

USE AdventureWorksDW2017;



WITH CustomersOrdered AS   
(    
SELECT S.ProductKey, C.CustomerKey, C.TotalChildren, C.BirthDate    
, ROW_NUMBER() OVER (    
                        PARTITION BY S.ProductKey 
                        ORDER BY C.TotalChildren DESC, C.BirthDate DESC, C.CustomerKey ASC   
                    ) AS CustomerSequence
FROM dbo.FactInternetSales AS S    
INNER JOIN dbo.DimCustomer AS C    
    ON S.CustomerKey = C.CustomerKey    
    )    
SELECT ProductKey, CustomerKey    
FROM CustomersOrdered    
WHERE CustomerSequence = 1    
ORDER BY ProductKey, CustomerKey;
...