2014-03-26 33 views
1

有这样一个表:我如何删除在访问表中的所有记录,除了最近

 
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 

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

+0

你在这里没有任何id列? – Alexander

+0

否 - 没有唯一的ID - 密钥是名称/日志/日期 –

回答

1

岂不:

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])) 

做诡计?

+0

说“查询必须至少有一个目标字段”? –

+0

Select *可能是问题,请尝试编辑的答案 – parakmiakos

+0

尝试删除* from ...,它工作!谢谢 –

0

感谢亚历山大,但创建表没有工作。所以我所做的就是创建一个子查询,它返回每个名称/日志组的最大值(日期)。然后在另一个查询中使用此子查询,该查询在原始表的名称/日志/日期中具有左连接。而刚刚从原表中删除记录,其中名称为空(即有子查询中找到具有相同名称的匹配记录/日志/日,因为有更高的记录有)

相关问题