2009-07-23 20 views
2

各clientidにはわずか1000個のエントリを保存します。以下のコードは、私が望むものの、クライアントIDをループせず、クライアントの合計を1000個保持しています。SQLルーピングを削除

SQLでこれを行う方法はありますか?私はカーソルが必要だと言われましたが、私は望んでいません。 Oracleで

DECLARE @ids TABLE (id int) 
DECLARE @clients TABLE (clientid varchar(20)) 

INSERT INTO @clients (clientid) 
SELECT select distinct clientid FROM tRealtyTrac 

INSERT INTO @ids (id) 
SELECT top 1000 id FROM tRealtyTrac WHERE clientid in (select clientid from @clients) 

DELETE trealtytrac WHERE id NOT IN (select id from @ids) 

答えて

2

は、このSQL Server 2005以降ですか?

INSERT INTO @ids (id) 
SELECT id FROM (
    SELECT id, RANK() OVER (PARTITION BY clientid ORDER BY id) AS Rank FROM tRealtyTrac 
) t 
WHERE t.Rank <= 1000 
+0

それは岩です!私は以前にパーティションを使用したことはありません。ありがとうございますedsoverflow。 – Bryan

2

DELETE from CLIENTS 
where CLIENT_ID = 'xxx' and 
rownum > 1000 
1

のようなものについて何を私は「オラクルの」答えは最新のエントリを削除すると思います。それに注意してください!

+0

(彼は "rownum> 1000"を使うRashadのもの) –