2016-09-23 80 views
1

我有一個MS Access表,客戶鍵與幾年的利率匹配,每年一行。由於用戶的交互作用,可能會出現這樣的情況:利率和年份的確切相同數據出現兩次,但具有不同的密鑰。我希望的方式來過濾這些是在MS Access中查找多行重複

[KEY] [year] [data1] [data2] 
    1 2000 0,3  0,2 
    1 2003 0,7  0,3 
    1 2007 0,1  0,2 
    2 2000 0,3  0,2 
    2 2003 0,7  0,3 
    2 2007 0,1  0,2 
    2 2016 0,3  0,1 

成爲

[KEY] [year] [data1] [data2] 
    1 2000 0,3  0,2   
    1 2003 0,7  0,3  
    1 2007 0,1  0,2  
    1 2016 0,3  0,1 

所以如果存在歷史的對應受影響的關鍵因素之一,應刪除(當然這個關鍵,應在客戶更新表)。 有沒有人有一個想法如何編碼?

+0

我想你在你想要的輸出的最後一行有一個錯字。 2016年的'[KEY]'應該是'2'嗎? –

+0

不,我想刪除其中一個密鑰,因此所有數據都應該是密鑰1或2.背景是多個費率連接到一個密鑰,但是如果更新其中一個費率(爲2016年添加數據)並忘記同意更新其他人,除了最新的密鑰外,還會生成一個具有相同數據的額外密鑰。我想寫一個逆轉這個過程的程序 – xxx

+0

'不,我想刪除其中一個鍵......哪一個? –

回答

2
DELETE t1.* 
FROM yourTable t1 
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM 
    (
     SELECT [year], [data1], [data2], MIN([KEY]) AS KEY 
     FROM yourTable 
     GROUP BY [year], [data1], [data2] 
    ) t2 
    WHERE t1.[KEY] = t2.[KEY] AND 
      t1.[year] = t2.[year] AND 
      t1.[data1] = t2.[data1] AND 
      t1.[data2] = t2.[data2] 
) 
+0

感謝您的回答!這對於上面的例子來說工作得很好,但是如果我添加了另外一個鍵3,例如2000年和2003年不同的data1和data2,它們將被刪除。所以我不能去Min(Key),因爲關係關鍵年可以出現兩次以上。你有一個想法如何包括這一點?對不起,詳細說明。 – xxx

+1

我更新了我的答案以滿足您的需求。 –