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