删除SQL循环

删除SQL循环,sql,sql-server,loops,distinct,sql-delete,Sql,Sql Server,Loops,Distinct,Sql Delete,我只想为每个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

我只想为每个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)
在Oracle中:

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

这是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

我认为Oracle中的答案将删除最新条目。小心那个

一个拉沙德用rownum>1000的那块石头!我以前从未使用过分区或秩。谢谢edsoverflow。