2010-12-10 31 views
1

我需要查询表中重复存款记录,其中在一个现金终端上进行的两笔存款在同一时间范围内相同的金额被视为重复记录。我现在已经开始了一个查询,但是我会很感激任何关于“正确”执行此操作的建议或建议。查找重复记录的高效查询

回答

2

一般情况下,你会做自连接到同一个表,并把你的“复制”连接条件中的标准。

E.g.

SELECT 
    * 
FROM 
    Transactions t1 
     inner join 
    Transactions t2 
     on 
      t1.Terminal = t2.Terminal and 
      t1.Amount = t2.Amount and 
      DATEDIFF(minute,t2.TransactionDate,t1.TransactionDate) between 0 and 10 and 
      t1.TransactionID > t2.TransactionID /* prevent matching the same row */ 
2

简单的集合

SELECT 
    col1, col2, col3, ... 
FROM 
    MyTable 
GROUP BY 
    col1, col2, col3, ... 
HAVING 
    COUNT(*) >= 2 

不包括你的身份/按键/ PK列:这将是每行扰乱了总独一无二的。

为了得到一个行上

SELECT 
    col1, col2, col3, ..., 
    MAX(IDCol) AS RowToDelete, 
    MIN(IDCol) AS RowToKeep 
FROM 
    MyTable 
GROUP BY 
    col1, col2, col3, ... 
HAVING 
    COUNT(*) >= 2 

当然,删除或保留的,做了MAX或MIN,3个重复然后做一个“养”。

编辑:

一时间窗口内的行,使用自连接或窗口/排序功能

+0

你最好找到确切的重复。 – 2010-12-10 08:30:10