2016-10-28 10 views
2

私たちは、png画像とそのソースURLをリストしたテーブルを持っています。T-SQLはテーブルから重複を削除しますか?

テーブルには、同じ画像URLであるが画像ピクセルの幅と高さが異なる行があることがあります。私はそのような重複を取り除き、最も大きい画像の幅と最大の画像の高さを持つ複製のみを残したいと思っています。

私はMSAccessで使用していたさまざまな方法を試しました(GroupByや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 –

関連する問題