2016-12-21 3 views
0

レコード数が10レコードを超えていた場合、古いレコードはクリーンアップされます。 これは、15レコードがテーブルに格納されている場合、最初に5レコードが消去されることを意味します。Sql Server 2008を使用してトップテーブルから10個以上のレコードを削除するにはどうすればよいですか?

例:SQL Serverでの

"DELETE FROM Table WHERE ID NOT IN (SELECT ??? 10 ID FROM Table)" 
+1

これは本当に奇妙なレコードの削除方法です。 – Rahul

+0

あなたは**古いレコードを指しています**。あなたのテーブルに日付レコードがありますか?いくつかのサンプルデータも提供してください。 – Viki888

+0

レコードがテーブルに挿入された順序を示す列がそのテーブルにありますか? –

答えて

6

、あなたは値を列挙して、whereを使用して、最も古いものを削除するためにrow_number()を使用することができます。

with todelete as (
     select t.*, row_number() over (order by id desc) as seqnum 
     from t 
    ) 
delete from todelete 
    where seqnum > 10; 

あなたのアプローチでも動作します。あなたは行うことができます。

delete from t 
    where t.id not in (select top 10 t2.id from t t2 order by t2.id desc); 

注:これはnot inを使用していますので、idNULL決してしないことを前提としています。この状況では合理的だと思われます。

関連する問題