удалить дубликаты с двумя if - PullRequest
0 голосов
/ 18 марта 2019

У нас есть таблица Microsoft SQL Server [database].[dbo].[UserInAppPurchase] с такими столбцами:

   [Id]
  ,[UserEmail]
  ,[UserId]
  ,[PurchaseDate]
  ,[ProductId]
  ,[TransactionId]
  ,[OriginalTransactionId]
  ,[ValidationTime]
  ,[ValidationReceipt]
  ,[ValidFrom]
  ,[ValidTo]
  ,[Platfrom]

Таким образом, UserID может иметь несколько записей одной и той же покупки по ошибке. Дубликаты будут иметь одинаковую ValidTo дату.

Так как бы мне удалить все дубликаты? В конце каждый UserId будет иметь ровно одну запись с конкретной датой ValidTo.

Спасибо за помощь

Andreas

1 Ответ

1 голос
/ 18 марта 2019

row_number() с обновляемым CTE приходит на ум:

with todelete as (
      select uiap.*, row_number() over (partition by userid, validto order by id) as seqnum
      from UserInAppPurchase uiap 
     )
delete from todelete
    where seqnum > 1;
...