0

id 列に PK を持つテーブルがあります。テーブルをきれいにして、最新の 5 つのレコード (最後の 5 つの ID - 最新のもの) をテーブルに残す必要があります。

使用する以外row_number()に、それを行う方法は他にありますか? どうも。

4

2 に答える 2

4

最初に、最新の 5 行の 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 つのレコードを一時テーブルに挿入します。次に、クエリの下で起動します..、

Table_Name から削除

次に、以下のクエリを使用して、一時テーブルからメイン テーブルに再度 (5 レコード) 挿入します。

Insert into Table_Name select * from Temp_Table

于 2012-12-16T18:31:32.167 に答える