我正在尝试限制返回的行数,虽然在常规代码中很简单,但是找不到使用SQL Server的方法。我有一个表,每个相同的交易ID可以包含多行,我想只删除最多2个删除,只有前2个。所以例如,我有以下内容:
Trade id 10, seq# 5, CR 1k
10, seq# 6, DR 1k
10, seq# 7, CR 1K
我想标记seq#5& 6,因为它们通过DR / CR相互抵消,我想按原样保留seq#7。使用连接我最终链接seq#5& 6和6& 7因为我正在寻找交易ID和行的行金额相同但信用/借记字段不是=。任何最感谢的帮助。
答案 0 :(得分:1)
使用Row_Number
窗口功能执行此操作。
select * from
(
select *,row_number() over(partition by Trade_id order by seq_no asc) as RN
From Yourtable
)
Where RN<=2
要删除记录,请使用CTE
;with cte as
(
select *,row_number() over(partition by Trade_id order by seq_no asc) as RN
From Yourtable
)
delete from cte
Where RN<=2