我有业务场景
我们将把所有数据都包含在数据库中,包括重复数据
如果我们在表中有任何重复项,则通过将所有剩余的deplicate记录标记为“X”
当处理到下一级别时,通过标志过滤提取!='X',这样我们就只能得到一份关于密钥的所有副本的最新记录。
我们如何更新除TOP 1记录之外的所有记录。
任何想法
感谢
prav
答案 0 :(得分:9)
可更新的cte:
with cte as (
select *, row_number () over (partition by foo order by bar) as rn
from table)
update cte
set flag = x
where rn > 1;
答案 1 :(得分:3)
假设您必须拥有可用于明确识别“最新”的列(下面称为datecol
)
UPDATE YourTable
SET YourTable.[flag] = 'X'
FROM YourTable t1
WHERE (not exists(
select * from YourTable t2
where t2.[key] = t1.[key] and
t2.datecol > t2.datecol))
答案 2 :(得分:2)
不确定这是不是您的意思:
UPDATE table
SET yourstuff
WHERE yourclauses
AND table.ID <> (select TOP 1 ID from table where yourclauses)
答案 3 :(得分:0)
更新table_name主要
set status ='X'
其中rowid不在
(选择max(rowid)
来自table_name子
其中main.column1 = sub.column1
和sub.status = main.status)
和main.status&lt;&gt; 'X'