【问题标题】:UPDATE records in a table except the TOP 1 recordUPDATE 表中除 TOP 1 记录外的记录
【发布时间】:2010-07-16 23:39:02
【问题描述】:

我的业务场景为

  1. 我们会将所有数据(包括重复项)放入数据库中

  2. 如果我们在表中有任何重复项,则通过将所有剩余重复记录标记为“X”,从特定键上的重复项中获取最新记录

  3. 在处理到下一个级别时,通过标志 != 'X' 过滤提取,因此我们可以从所有重复项中仅获取一条最新记录以获取 perticulat 键。

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

任何想法

谢谢

说实话

【问题讨论】:

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


    【解决方案1】:

    一个可更新的 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;
    

    【讨论】:

      【解决方案2】:

      假设您必须具有可用于明确识别“最新”的列(以下称为 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))
      

      【讨论】:

        【解决方案3】:

        不确定这是不是你的意思:

        UPDATE table
          SET yourstuff
        WHERE yourclauses
            AND table.ID <> (select TOP 1 ID from table where yourclauses)
        

        【讨论】:

        • ORDER BY someorder 添加到子查询中,你就会得到我的投票:)
        【解决方案4】:

        更新表名主
        设置状态 = 'X'
        rowid 不在的地方
        (选择最大值(rowid)
        从表名子
        其中 main.column1 = sub.column1
        和 sub.status = main.status)
        和 main.status 'X'

        【讨论】:

          【解决方案5】:

          请试试这个....

          Declare @tbl as Table(ID int Identity(1,1),lName varchar(max),fName varchar(max),IsD bit default(0))
          
          Insert into @tbl(lName,fName)values('XYZ','PQR'),('XYZ','PQR'),('XYZ','HHH'),('XYZ','HHH'),('P','o'),('P','o')
          
          update s 
              Set
              S.IsD =1
              from @tbl S Inner Join
                      (Select MIN(ID) ID,fName,lName from @tbl  group by fName ,lName having count(*) > 1) M
              on S.fName = M.fName and S.lName = s.lName
              Where S.ID != M.ID
          
          
          Select * from @tbl
          

          【讨论】:

            猜你喜欢
            • 2015-11-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-01
            • 2011-11-06
            • 1970-01-01
            • 1970-01-01
            • 2018-02-17
            相关资源
            最近更新 更多