首页 > 解决方案 > 识别 SQL 中的重复事务

问题描述

最近因为一个问题,多个重复的事务在不同的时间被插入到数据库中。需要找到那些重复的交易并删除它们。

我尝试将成员和交易分组

   select count(*),
          member_id,
          TRUNC(created, 'DDD') 
     from TXN
    where created > TO_DATE('06/01/2019 00:00:00', 'MM/DD/YYYY HH24:MI:SS')
 group by member_id,
          TRUNC(created, 'DDD') 
   having count(*) > 2;

我需要在 10 分钟时差内为同一成员创建的所有交易。

例子:

MEMBER_ID  ROW_ID  ORG  DEST  Created
1-FRGD     1-FGTH  YFG  DFG   10-01-2019 00:00:00:00
1-FRGD     1-TYHG  THU  SEF   10-01-2019 00:00:09:12
1-FGHR     1-FTGH  TGH  DRF   10-01-2019 00:01:03:25

在此示例中,我需要前两个 txns 作为输出,因为如果时差不超过 10 分钟并且具有相同的成员编号

标签: mysqlsql

解决方案


您可能想要自我加入

  select a.Member_Id as Member_Id,
         a.Row_Id    as Row_Id, 
         a.Org       as Org,  
         a.Dest      as Dest ,
         a.Created   as Created,
         b.Row_Id    as Duplicate_Row_Id, 
         b.Org       as Duplicate_Org,  
         b.Dest      as Duplicate_Dest,
         b.Created   as Duplicate_Created 
    from TXN a inner join
         TXN b on a.Member_Id = b.Member_Id and 
                  a.Created < b.Created and
                  TIMESTAMPDIFF(a.Created, b.Created) / 60 <= 10
order by a.Member_Id

对于您中的每条记录,TNX请提供其重复项。


推荐阅读