0

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

除了使用row_number()还有其他想法吗?谢谢。

4

2 回答 2

4

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

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

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

然后在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)
于 2012-12-16T16:46:53.767 回答
1

首先在临时表中插入前 5 条记录。然后在查询下方触发..,

从表名中删除

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

插入 Table_Name 选择 * from Temp_Table

于 2012-12-16T18:31:32.167 回答