При наличии повторяющихся строк в таблицах базы данных MS SQL Server может потребоваться удалить дубликаты записей.
Функция T-SQL Row_Number() может помочь разработчикам sql решить эту проблему sql.
Перед удалением некоторых строк в таблице базы данных SQL следует решить, какую из дубликатов строк вы сохраните. И вы должны решить, какие строки удалять.
Возможно, вы захотите сохранить первую запись, которую можно предположить, поскольку вставленная дата является самой ранней.
Или, если в таблице SQL есть столбец идентификатора, скажем, столбец Id с целым числом типа данных (int).
Можно сохранить повторяющуюся строку с наименьшим значением Id или с наибольшим значением Id.
Таким образом, SQL Row_Number позволяет разработчикам tsql ранжировать записи и строки таблицы по требуемым столбцам и полям таблицы, даже позволяет секционировать результирующий набор на основе столбцов таблицы.
Прежде чем дать пример sql для удаления повторяющихся строк, давайте создадим таблицу sql и заполним таблицу образцами повторяющихся строк.
1 2 3 4 5 6 7 |
CREATE TABLE Suppliers ( Id int identity (1,1), CompanyTitle nvarchar(1000), ContactName nvarchar(100), LastContactDate datetime ) |
Теперь вставьте образцы данных в таблицу Поставщики для удаления дубликатов записей примера.
1 2 3 4 5 6 7 |
INSERT Suppliers VALUES (N'Melody Music Instruments',N'James Manning', '20090623 10:15') INSERT Suppliers VALUES (N'Blue Jazz',N'Mike Clark', '20090720 15:40') INSERT Suppliers VALUES (N'Top Music',N'Katy Swan', '20090827 18:00') INSERT Suppliers VALUES (N'Blue Jazz',N'Mike Clark', '20090806 10:00') INSERT Suppliers VALUES (N'Melody Music Instruments',N'James Brown', '20080121 11:20') INSERT Suppliers VALUES (N'Top Music',N'Katy Perry', '20090825 14:00') INSERT Suppliers VALUES (N'Top Music',N'Katy Perry', '20090825 14:00') |
Упорядочивание строк по полям даты и времени
Давайте закажем строки таблицы в соответствии с датой последнего контакта в каждой записи компании.
1 2 3 4 |
SELECT RN = ROW_NUMBER() OVER (PARTITION BY CompanyTitle ORDER BY LastContactDate DESC), Id, CompanyTitle, ContactName, LastContactDate FROM Suppliers |
И в каждой группе, которая формируется полем «Компания», мы будем хранить только строку с наибольшим значением поля Identity (значение столбца Id) и удалять другие, удаляя их.
1 2 3 4 5 6 7 |
WITH [CTE DUPLICATE] AS ( SELECT RN = ROW_NUMBER() OVER (PARTITION BY CompanyTitle ORDER BY Id DESC), Id, CompanyTitle, ContactName, LastContactDate FROM Suppliers ) |
Очень легко идентифицировать дубликаты строк и удалять дубликаты в соответствии с вашими требованиями, используя предложение partition over, ROW_NUMBER() OVER (PARTITION BY columnname1, columnname2 ORDER BY columnname3 DESC) и используя его в инструкции CTE t-sql, как показано в приведенных выше примерах t-sql.
Я надеюсь, что вам понравятся примеры sql и вы найдете их полезными.
Если у вас одинаковые строки, я имею в виду, что все значения столбцов идентичны, как мы можем идентифицировать повторяющиеся строки и удалить дубликаты записей из таблицы базы данных с помощью команд t-sql. В этом случае по-прежнему существуют методы для администраторов sql и разработчиков t-sql для удаления дубликатов строк в таблицах sql. Вы можете найти другой учебник по SQL под названием Как удалить дубликаты записей или строк среди идентичных строк в таблице, где нет первичного ключа среди статей Kodyaz SQL.