使用两个if删除重复项

时间:2019-03-18 15:58:14

标签: sql sql-server database sql-delete

我们有一个Microsoft SQL Server表[database].[dbo].[UserInAppPurchase],其中包含以下列:

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

因此,UserID可能具有同一笔购买的多个记录,但均会出错。重复项将具有相同的ValidTo日期。

那么我将如何删除所有重复项?最后,每个UserId都将只有一个带有该特定ValidTo日期的条目。

感谢您的帮助

安德烈亚斯

1 个答案:

答案 0 :(得分:1)

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;