2010-12-10 28 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