2009-07-23 73 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