sql - 删除SQL循环

标签 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 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)

最佳答案

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

关于sql - 删除SQL循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1174619/

相关文章:

java - 需要在 camel Talend 中动态创建 SQL 语句

sql - 在 Management Studio 中查看表列表所需的权限

javascript - 如何在 Jquery 中创建动态下拉列表循环?

sql - IS NULL 与 <> 1 SQL 位

java - 需要有关我自己的搜索引擎实现的基本 SQL 查询的帮助

c# - 使用选择参数动态更改 JOIN 的结果

sql - 如何在sql server中在两个二进制类型之间进行按位异或?

sql-server - SQL Server CE 中的收缩和压缩有什么区别?

php - Bootstrap - 模态仅显示第一项

vb.net - 在 VB.NET 中循环遍历文本文件的行