2009-07-23 3 views
2

Ich möchte nur 1000 Einträge für jede Client-ID behalten. Der Code unten tut, was ich will, aber nicht durch die clientid, sondern 1000 insgesamt von einem der Clients.SQL-Looping löschen

Gibt es eine Möglichkeit, dies in SQL zu tun? Mir wurde gesagt, ich brauche einen Cursor, aber ich hoffe nicht.

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) 

Antwort

2

Ist der SQL Server 2005 oder höher? Wie wäre es mit etwas wie

+0

Das rockt! Ich habe noch nie zuvor eine Partition nach oder einen Rang verwendet. Danke edsoverflow. – Bryan

2

in Oracle:

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

Ich denke, die "in Oracle" -Antwort wird die neuesten Einträge löschen. Sei vorsichtig damit!

+0

(Der von A Rashad, wo er "rownum> 1000" verwendet) –