2009-07-23 102 views
2

我想只为每个clientid保留1000个条目。下面的代码做我想要的,但不循环clientid,而是保持1000个任何客户端。删除SQL循环

有没有办法在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) 

回答

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 2009-07-23 22:22:18

2

在甲骨文:

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

我认为“在Oracle”的答案将删除最新的条目。小心那个!

+0

(A rashad使用“rownum> 1000”的那个) – 2009-07-23 21:56:21