Sql 删除除最高日期之外的所有行

Sql 删除除最高日期之外的所有行,sql,sql-server,Sql,Sql Server,我有一张像这样的桌子 ID | Create Date ---+------------------------- 1 | 2007-06-12 15:44:10:000 1 | 2007-07-12 15:44:10:000 2 | 2007-06-12 15:44:10:000 2 | 2007-07-12 15:44:10:000 2 | 2007-08-12 15:44:10:000 3 | 2007-09-12 15:44:10:000 4 | 2012-06-12 15

我有一张像这样的桌子

ID | Create Date
---+-------------------------
1  | 2007-06-12 15:44:10:000
1  | 2007-07-12 15:44:10:000
2  | 2007-06-12 15:44:10:000
2  | 2007-07-12 15:44:10:000
2  | 2007-08-12 15:44:10:000
3  | 2007-09-12 15:44:10:000
4  | 2012-06-12 15:44:10:000
5  | 2011-07-12 15:44:10:000
我需要保留maxcreatedate,同时删除所有其他行。我还需要保留ID为3,4,5的行

任何帮助都会很好

注:这有点抽象。实际表中有数百万个ID,其中有许多具有不同创建日期的重复ID

DELETE FROM table
WHERE ID NOT IN (SELECT ID FROM table 
WHERE ID IN 3, 4, 5 OR ID = (SELECT ID FROM table as a
                             WHERE createdate = (SELECT MAX(createdate) FROM 
                              table as b WHERE a.ID = b.ID)))
试试这个:

DELETE FROM table
WHERE ID NOT IN (SELECT ID FROM table 
WHERE ID IN 3, 4, 5 OR ID = (SELECT ID FROM table as a
                             WHERE createdate = (SELECT MAX(createdate) FROM 
                              table as b WHERE a.ID = b.ID)))
您可以使用ROW_NUMBER标识具有最新日期的记录,并删除其余记录:

;With ToDelete As
(
    Select  *,
            Row_Number() Over (Partition By Id Order By CreateDate Desc) RN
    From    YourTable
)
Delete  ToDelete
Where   RN <> 1
您可以使用ROW_NUMBER标识具有最新日期的记录,并删除其余记录:

;With ToDelete As
(
    Select  *,
            Row_Number() Over (Partition By Id Order By CreateDate Desc) RN
    From    YourTable
)
Delete  ToDelete
Where   RN <> 1

您使用的是什么数据库管理系统?SQL Server?MySQL?神谕还有别的吗?SQLServer2008R2SO是一个很好的提问和获取答案的网站:一定要提供完整的答案。在你问问题之前,先考虑一下。是的,我是认真的!为了帮助我们,请生成示例数据和预期结果。使输出易于阅读!您还可以使用或类似的站点模拟数据和SQL。几乎一切皆有可能;这是一个我们应该做的问题;我们不行。就目前而言,这个问题太模糊了。使用表格显示预期结果。我不知道您是否需要每个ID的最大日期或所有ID的最大日期,或者ID的最大日期不是2,3,4。。。太多的可能性,期望的结果将有助于澄清。您使用的是什么数据库管理系统?SQL Server?MySQL?神谕还有别的吗?SQLServer2008R2SO是一个很好的提问和获取答案的网站:一定要提供完整的答案。在你问问题之前,先考虑一下。是的,我是认真的!为了帮助我们,请生成示例数据和预期结果。使输出易于阅读!您还可以使用或类似的站点模拟数据和SQL。几乎一切皆有可能;这是一个我们应该做的问题;我们不行。就目前而言,这个问题太模糊了。使用表格显示预期结果。我不知道您是否需要每个ID的最大日期或所有ID的最大日期,或者ID的最大日期不是2,3,4。。。太多的可能性,预期的结果将有助于澄清。对不起,我给你的样本是一个小摘录。实际的表有数百万个ID,其中有许多具有不同创建日期的复杂ID。我给您的示例只是一个小摘录。实际表中有数百万个ID,其中有许多具有不同创建日期的双副本ID