如何删除访问表中除最近的记录之外的所有记录

时间:2014-03-26 11:48:23

标签: sql ms-access

我有一张表:

name  -  log  -  date        -  dataFields    
john  -  2    -  21/03/2014  -  123  
john  -  2    -  22/03/2014  -  345  
john  -  2    -  23/03/2014  -  234  
karl  -  2    -  20/03/2014  -  789  
liam  -  1    -  20/03/2014  -  135  
liam  -  2    -  21/03/2014  -  321  
mick  -  1    -  20/03/2014  -  987  
mick  -  1    -  21/03/2014  -  123  
mick  -  2    -  22/03/2014  -  456  
mick  -  3    -  20/03/2014  -  789  
mick  -  3    -  24/03/2014  -  456  

我想删除除最新名称/日志组合之外的所有记录。所以在这个例子中我留下了

john  -  2    -  23/03/2014  -  234  
karl  -  2    -  20/03/2014  -  789  
liam  -  1    -  20/03/2014  -  135  
liam  -  2    -  21/03/2014  -  321  
mick  -  1    -  21/03/2014  -  123  
mick  -  2    -  22/03/2014  -  456  
mick  -  3    -  24/03/2014  -  456  

我尝试使用子查询来选择我想要保留的记录。然后使用not exists选择我要删除的记录,但不选择任何记录。我可以用这种方式不存在吗?

2 个答案:

答案 0 :(得分:2)

不会:

Delete from [TableName] as T1
Where Exists(
SELECT [log],[name],Max([date]) FROM [TableName] 
Where [log] = T1.[log]
And [name] = T1.[name]
Group By [log],[name]
Having T1.[date] < Max([date]))

诀窍?

答案 1 :(得分:0)

感谢亚历山大,但是创建表没有用。所以我所做的是创建一个子查询,返回每个名称/日志组的最大值(日期)。然后在另一个查询中使用此子查询,该查询在原始表的名称/ log / date上具有左连接。并且只删除原始表中name为null的记录(即在子查询中找不到具有相同名称/ log / date的匹配记录,因为那里有后来的记录)