2016-10-28 4 views
2

У нас есть таблица, в которой перечислены изображения png и их исходный URL.T-SQL удаляет дубликаты из таблицы?

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

Я пробовал различные методы, которые я использовал для использования в MSAccess (например, GroupBy и First, но First, например, недоступен в SQL Server, поэтому я подумал, что попрошу помочь в T-SQL).

Может кто-нибудь дать T-SQL, который удалит дубликаты (сохраняя наибольшую строку изображения каждого дубликата)?

CREATE TABLE [dbo].[tblImageSuggestions] 
(
    [CounterID] [bigint] IDENTITY(700996,1) NOT NULL, 
    [CreatedDateTime] [datetime] NOT NULL, 
    [EmailAddress] [nvarchar](200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [ImageOriginalURL] [nvarchar](2000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [ImageOriginalWidthPixels] [int] NOT NULL, 
    [ImageOriginalHeightPixels] [int] NOT NULL, 

    CONSTRAINT [PK_tblImageSuggestions] 
     PRIMARY KEY CLUSTERED ([CounterID] ASC) 
       WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
        IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
        ALLOW_PAGE_LOCKS = ON) 
) 

SET IDENTITY_INSERT [dbo].[tblImageSuggestions] ON 

INSERT [dbo].[tblImageSuggestions] ([CounterID], [CreatedDateTime], [EmailAddress], [ImageOriginalURL], [ImageOriginalWidthPixels], [ImageOriginalHeightPixels]) 
VALUES (701030, CAST(0x0000A6AD0005543F AS DateTime), N'[email protected]', N'MyURL1', 1024, 1024) 

INSERT [dbo].[tblImageSuggestions] ([CounterID], [CreatedDateTime], [EmailAddress], [ImageOriginalURL], [ImageOriginalWidthPixels], [ImageOriginalHeightPixels]) 
VALUES (701031, CAST(0x0000A6AD00055445 AS DateTime), N'[email protected]', N'MyURL2', 450, 450) 

INSERT [dbo].[tblImageSuggestions] ([CounterID], [CreatedDateTime], [EmailAddress], [ImageOriginalURL], [ImageOriginalWidthPixels], [ImageOriginalHeightPixels]) 
VALUES (701032, CAST(0x0000A6AD00055489 AS DateTime), N'[email protected]', N'MyURL3', 3000, 3000) 

INSERT [dbo].[tblImageSuggestions] ([CounterID], [CreatedDateTime], [EmailAddress], [ImageOriginalURL], [ImageOriginalWidthPixels], [ImageOriginalHeightPixels]) 
VALUES (701033, CAST(0x0000A6AD00055768 AS DateTime), N'[email protected]', N'MyURL2', 1024, 1024) 

INSERT [dbo].[tblImageSuggestions] ([CounterID], [CreatedDateTime], [EmailAddress], [ImageOriginalURL], [ImageOriginalWidthPixels], [ImageOriginalHeightPixels]) 
VALUES (701034, CAST(0x0000A6AD00055771 AS DateTime), N'[email protected]', N'MyURL1', 450, 450) 

INSERT [dbo].[tblImageSuggestions] ([CounterID], [CreatedDateTime], [EmailAddress], [ImageOriginalURL], [ImageOriginalWidthPixels], [ImageOriginalHeightPixels]) 
VALUES (701035, CAST(0x0000A6AD0005577A AS DateTime), N'[email protected]', N'MyURL4', 768, 768) 

SET IDENTITY_INSERT [dbo].[tblImageSuggestions] OFF 
+1

Можете ли вы показать нам, что у вас есть до сих пор, насколько не-рабочий код? Нам нужно увидеть ваш подход, чтобы рассказать вам, где вам может понадобиться помощь. Предоставление простых определений таблиц и запрос на решение на самом деле не соответствуют тому, как задавать вопрос о SO. – user2366842

+0

, если у вас есть связанные данные или таблица с этой таблицей, вы должны сначала исследовать ее. что может ухудшить вашу проблему. – Beginner

ответ

2
;with cte as (
    Select *,RowNr=Row_Number() over (Partition By ImageOriginalURL Order by ImageOriginalWidthPixels*ImageOriginalHeightPixels Desc) 
    From [tblImageSuggestions] 
) 
--Delete From cte Where RowNr>1  
Select * from cte Where RowNr>1 -- To be deleted ... Remove if Satisfied 
+0

Спасибо, это прекрасно. – user1946932

+0

@ user1946932 Happy to help –

Смежные вопросы