我有一张表:
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选择我要删除的记录,但不选择任何记录。我可以用这种方式不存在吗?
答案 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的匹配记录,因为那里有后来的记录)