Sql server 如何使用筛选器删除重复行

Sql server 如何使用筛选器删除重复行,sql-server,tsql,sql-server-2008-r2,Sql Server,Tsql,Sql Server 2008 R2,有如下表格: declare @tbl TABLE (id int,sub_id int,[money] money) insert into @tbl (id,sub_id,money) SELECT 289,33602502,800.00 UNION ALL SELECT 300,33602502,805.00 UNION ALL SELECT 735,33603527,7175.77 UNION ALL SELECT 741,33603527,7172.77 UNION ALL SELEC

有如下表格:

declare @tbl TABLE (id int,sub_id int,[money] money)
insert into @tbl (id,sub_id,money)
SELECT 289,33602502,800.00
UNION ALL
SELECT 300,33602502,805.00
UNION ALL
SELECT 735,33603527,7175.77
UNION ALL
SELECT 741,33603527,7172.77
UNION ALL
SELECT 2049,33606066,4817.77
UNION ALL
SELECT 2060,33606066,4791.77
UNION ALL
SELECT 2598,33607099,4084.77
UNION ALL
SELECT 2605,33607099,4053.77
想要删除子单元id相同且货币字段为min的行。 例如,响应必须如下所示:

id   sub_id      money
289 33602502    800.00
741 33603527    7172.77
2060 33606066   4791.77
2605 33607099   4053.77
怎么做?

试试这个:

DELETE FROM @tbl WHERE id in(
select t1.id from @tbl t1
inner join @tbl t2 on t1.sub_id = t2.sub_id
WHERE t1.money > t2.money)

select * from @tbl
您应该为这样的任务使用。 这将删除每个sub_id的最低金额行:

;WITH cte as
(
  SELECT *, row_number() over (partition by sub_id order by money) rn from @tbl
)
DELETE cte where rn = 1

首先确定如何选择要删除的行。以及如何唯一标识它们,如果有3行具有相同的sub_id,是否要删除2行?听起来合乎逻辑,但您的文本说您只想删除最下面的Thank you it works for methis有一个自连接,导致执行计划的效率低于必要的水平
;WITH cte as
(
  SELECT *, row_number() over (partition by sub_id order by money) rn from @tbl
)
DELETE cte where rn = 1