删除除最近的5个记录以外的所有记录

时间:2012-12-16 16:45:03

标签: sql-server

我有一个在id列上有PK的表。我需要清理表格,并在表格中留下5个最近的记录(最后5个id - 最近的记录)。

除了使用row_number()之外还有其他想法如何做到这一点? THX。

2 个答案:

答案 0 :(得分:4)

首先,您需要获取最近五行的PK:

SELECT TOP 5 id FROM [table] ORDER BY id DESC

此子查询将返回最近5行的ID,假设最近的行具有最高的PK。

然后在外部查询的WHERE子句中使用此子查询

DELETE FROM [table] WHERE id NOT IN ([subquery from above])

等同于此

DELETE FROM [table] WHERE id NOT IN (id0, id1, id2, id3, id4)

完整的查询是:

DELETE FROM [table]
WHERE id NOT IN (SELECT TOP 5 id 
                 FROM [table] 
                 ORDER BY id DESC)

答案 1 :(得分:1)

首先在临时表中插入前5个记录。 然后在查询下面开火..,

从Table_Name中删除

然后使用以下查询从临时表再次插入(5条记录)到主表。

从Temp_able

插入Table_Name select *