Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите внести исправления в процедуру  [new]
kirill_d
Member

Откуда:
Сообщений: 6
в процедуре есть часть кода:
 if( exists(
   	  select 1
	           from   [dbo].[import_penalty] i
	                  left join dbo.penalty p
	                       on  i.UIN = p.UIN
	           where  i.importStateId = 0 and p.kod is null
   
   ))
   begin

проверяет по уникальным UIN в базе PENALTY, и тех которых нет из базы import_penalty далее добавляет. все работает в таком варианте прекрасно много месяцев.
теперь пришли изменения - в базе import_penalty теперь возможно несколько записей с одинаковым UIN и надо взять только 1 ту запись в которой 'id' максимальное из них. возможно ли это прописать в данный отбор?
31 июл 17, 09:08    [20686844]     Ответить | Цитировать Сообщить модератору
 Re: помогите внести исправления в процедуру  [new]
kirill_d
Member

Откуда:
Сообщений: 6
либо может быть перед этим в процедуре выполнить delete дублей чтобы остался в таблице import_penalty только с макс id запись.
такое возможно? как это прописать?
31 июл 17, 09:10    [20686848]     Ответить | Цитировать Сообщить модератору
 Re: помогите внести исправления в процедуру  [new]
o-o
Guest
так можно удалить дубли, оставив только строки с максимальным id для каждого UIN:
with cte as
(
select *, ROW_NUMBER() over(partition by UIN order by id desc) rn
from dbo.penalty
)

delete cte
where rn > 1;
31 июл 17, 09:25    [20686876]     Ответить | Цитировать Сообщить модератору
 Re: помогите внести исправления в процедуру  [new]
kirill_d
Member

Откуда:
Сообщений: 6
Да. такой вариант сработал вроде нормально!
Спасибо!
31 июл 17, 10:13    [20686982]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить