我有一个在id列上有PK的表。我需要清理表格,并在表格中留下5个最近的记录(最后5个id - 最近的记录)。
除了使用row_number()
之外还有其他想法如何做到这一点?
THX。
答案 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 *