如果你真的想“删除dateupdated最少更新的行”,那么一个简单的单行子查询应该可以做到。
DELETE MyTable
WHERE Date = (SELECT MIN(Date) From MyTable)
如果在另一方面,你只是想删除与最早的日期行每人(通过其ID),你可以使用:
DELETE MyTable
FROM MyTable a
JOIN (SELECT ID, MIN(Date) MinDate FROM MyTable GROUP BY ID) b
ON a.ID = b.ID AND a.Date = b.MinDate
这里的想法是你创建一个聚合查询,返回包含与要删除的行相匹配的列的行,然后加入到该行中。因为它是内连接,所以不符合标准的行将被排除。
如果人们唯一由别的标识(如Name
那么你可以替换,对于上面我的例子ID
。
我在想,虽然你不希望任何的这些事情。我想你要删除的除了每个人的最新行的一切。如果是这样的话,试试这个:。
DELETE MyTable
WHERE EXISTS (SELECT 0 FROM MyTable b WHERE b.ID = MyTable.ID AND b.Date > MyTable.Date)
这里的想法是您检查具有相同ID和以后的日子另一个数据行的存在,如果存在是以后的记录,请删除这个。
最后一个例子的好处是你可以一遍又一遍地运行,每个人仍然只剩下一行。其他两个查询,如果一遍又一遍地运行,则会在表中一直读取,直到它为空。
P.S.由于这些解决方案明显不同,我建议您花费一些努力来学习如何阐明明确的要求。对于任何开发者来说,这是一项非常重要的技能
请告诉我们你已经尝试什么,以及为什么它没有工作。 – JiggsJedi
你是如何从结果中删除Mike的?他不是重复的名字,他没有更新'1/02/17',而是'1/03/17'。 – SqlZim
@SqlZim我已编辑帖子。 – sam