2

clientid ごとに 1000 エントリのみを保持したいと考えています。以下のコードは私が望むことを行いますが、clientid をループせず、代わりに合計 1000 のクライアントを保持します。

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

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)
4

3 に答える 3

2

Oracleの場合:

DELETE from CLIENTS
where CLIENT_ID = 'xxx' and
rownum > 1000
于 2009-07-23T21:40:08.237 に答える
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
于 2009-07-23T21:51:38.790 に答える
1

「in Oracle」の回答は最新のエントリを削除すると思います。そいつには気をつけろ!

于 2009-07-23T21:55:07.723 に答える