SQL Server 2012: search de duplicates avec des critères

Sur SQL Server 2012 , j'ai une table qui est similaire à ci-dessous:

 Id | SessionId | TypeId | Operation | Data ------------------------------------------------------------------------ 1 | ABC-123 | 6 | I |<Record EmployeeName="Joe" /> 2 | ABC-123 | 6 | U |<Record EmployeeName="Joe" /> 

Pour nous, la deuxième ligne est un doublon (je veux supprimer l'logging avec l'opération 'U' puisque j'ai déjà une opération 'I' ) et je veux l'enlever. Cependant, mon SQL j'ai essayé de supprimer d'autres loggings aussi (voir ci-dessous).

 ;WITH CTE AS ( SELECT [id], [SessionId], [TypeId], [Operation], [Data], RN = ROW_NUMBER() OVER (PARTITION BY [SessionId], [Data] ORDER BY [Data]) FROM dbo.MyTable WHERE SessionId = @sessionId ) DELETE FROM CTE WHERE [Operation] = 'U' 

Pouvez-vous aider?

 DECLARE @t TABLE ( Id INT IDENTITY(1,1) PRIMARY KEY, SessionId VARCHAR(50), TypeId INT, Operation CHAR(1), Data XML ) INSERT INTO @t (SessionId, TypeId, Operation, Data) VALUES ('ABC-123', 6, 'I', '<Record EmployeeName="Joe" />'), ('ABC-123', 6, 'U', '<Record EmployeeName="Joe" />') ;WITH CTE AS ( SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY [SessionId], CHECKSUM(CAST([Data] AS NVARCHAR(MAX))) ORDER BY Id) FROM @t ) DELETE FROM CTE WHERE RN > 1 AND Operation = 'U' SELECT * FROM @t 

sortie –

 Id SessionId TypeId Operation Data --- ------------ ----------- --------- ------------------------------ 1 ABC-123 6 I <Record EmployeeName="Joe" />