更新记录,除了TOP 1的记录
问题描述:
我有业务场景为更新记录,除了TOP 1的记录
我们会得到所有的数据到数据库中,包括重复
如果我们任何一个表中复制通过将所有剩余重复记录标志设为'X',从所有剩余重复记录标志取'X'取最近的记录
当处理到下一级时,通过标志!='X'过滤提取,因此我们只能得到一个最最近的记录来自al l一个重复的密钥。
如何更新除TOP 1记录以外的所有记录。
任何想法
感谢
prav
答
不知道这是什么,你的意思是:
UPDATE table
SET yourstuff
WHERE yourclauses
AND table.ID <> (select TOP 1 ID from table where yourclauses)
答
假设你必须有柱(一个或多个),可用于明确标识“最近”(以下称为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))
答
一个可更新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;
答
更新表名主
设置状态= 'X'
其中ROWID不
(选择MAX(ROWID)
从表名子
其中主要。 column1 = sub.column1
and sub.status = main.status)
and main.status <>'X'
答
请试试这个....
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
加上'ORDER BY someorder'的子查询,你会得到我的投票:) – egrunin 2010-07-17 03:15:46