ОБНОВЛЕНИЕ записей в таблице, кроме записи ТОП 1 - PullRequest
1 голос
/ 17 июля 2010

У меня есть бизнес-сценарий как

  1. Мы получим все данные в базу данных, включая дубликаты

  2. Если у нас есть какие-либо дубликаты в таблице, возьмите самую последнюю запись из дубликатов на ключе perticular, установив для всех оставшихся дубликатов записи значение «X»

  3. При обработке до следующего уровня фильтруйте извлечение по флагу! = 'X', чтобы мы могли получить только одну самую последнюю запись из всех дубликатов для ключа-пертикулята.

Как мы можем обновить все записи, кроме записи TOP 1.

любые мысли

спасибо

Правдин

Ответы [ 5 ]

9 голосов
/ 17 июля 2010

обновляемый 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;
3 голосов
/ 17 июля 2010

Предполагая, что у вас должны быть столбцы, которые можно использовать для однозначной идентификации "самых последних" (называемых 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 голосов
/ 17 июля 2010

Не уверен, что это то, что вы имеете в виду:

UPDATE table
  SET yourstuff
WHERE yourclauses
    AND table.ID <> (select TOP 1 ID from table where yourclauses)
0 голосов
/ 11 сентября 2015

Пожалуйста, попробуйте это ....

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
0 голосов
/ 30 марта 2011

обновить имя_таблицы main
установить статус = 'X'
где rowid не в
(выберите max (rowid)
из sub_name таблицы
где main.column1 = sub.column1
и sub.status = main.status)
и main.status <> 'X'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...