2016-09-23 71 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

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