我在MS SQL Server中有一个表,它有一些唯一且重复的记录。
让我们说我的桌子就像
Name Modified Visibility UserTypeEx
x 24.05.2015 1 4096
y 01.01.2014 0 4096
z 01.04.2016 1 4096
x 05.03.2015 1 4096
y 06.08.2015 1 4097
y 05.07.2014 1 4096
如您所见,我在name
列中有重复。我要做的是将所有visibility
字段更新为0
UserTypeEx
所在的4096
,除了我想要的重复name
的地方仅更新共享name
的每个组中最后添加的记录。
这样的更新会将示例数据转换为:
Name Modified Visibility UserTypeEx
x 24.05.2015 0 4096
y 01.01.2014 0 4096
z 01.04.2016 0 4096
x 05.03.2015 1 4096
t 06.08.2015 1 4097
y 05.07.2014 0 4096
有什么建议吗?
答案 0 :(得分:2)
在SQL Server中,您可以使用带有更新的窗口函数。这非常方便:
with toupdate as (
select t.*,
row_number() over (partition by name order by modified desc) as seqnum,
count(*) over (partition by name) as cnt
from t
where UserTypeEx
)
update toupdate
set visibility = 0
where cnt > 1 and seqnum = 1;