除了TOP 1记录之外的表中的UPDATE记录

时间:2010-07-16 23:39:02

标签: sql-server tsql sql-server-2008 ssis

我有业务场景

  1. 我们将把所有数据都包含在数据库中,包括重复数据

  2. 如果我们在表中有任何重复项,则通过将所有剩余的deplicate记录标记为“X”

  3. ,从最重要的密钥中获取最新记录。
  4. 当处理到下一级别时,通过标志过滤提取!='X',这样我们就只能得到一份关于密钥的所有副本的最新记录。

  5. 我们如何更新除TOP 1记录之外的所有记录。

    任何想法

    感谢

    prav

4 个答案:

答案 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'