SQL Server Query-Update Duplicate Records - PullRequest
0 голосов
/ 22 марта 2020

Не могли бы вы помочь мне с SQL запросом к серверу. Я хочу вставить записи таблицы 1 в таблицу 2 согласно бизнес-правилу.

Бизнес-правило 1- Если Ref_No. совпадает и MsgCreatedDt отличаются, затем вставьте эти записи и обновите самую первую запись ( Примечания столбец) как пустые и оставьте как дубликаты.

Бизнес-правило2- Если Ref_No. то же самое, и MsgCreatedDt тоже то же самое, затем вставьте только одну запись.

Ниже приведены вход и выход.

Вход: Table1

ID  Ref_No  MsgCreatedDt    Remarks
1   Ref1    22-03-2020 17:39    
2   Ref1    22-03-2020 17:42    
3   Ref1    22-03-2020 18:10    
4   Ref2    22-03-2020 16:11    
5   Ref2    22-03-2020 16:11    

Выход: Table2

ID  Ref_No  MsgCreatedDt        Remarks
1   Ref1    22-03-2020 17:39    
2   Ref1    22-03-2020 17:42    Duplicate
3   Ref1    22-03-2020 18:10    Duplicate
4   Ref2    22-03-2020 16:11

enter image description here

Ответы [ 2 ]

2 голосов
/ 22 марта 2020

Немного проще, чем метод двойного числа:

  insert into Table2
  select
    min(id),
    ref_no,
    msgcreateddt,
    case when msgcreateddt > min(msgcreateddt) over (partition by ref_no) then 'Duplicate' end 
  from Table1
  group by ref_no, msgcreateddt

Это работает, потому что оконные функции выполняются после группировки по; group by удаляет строки с точно дублированными датами, затем используется оконная функция (min(msgcreateddt) over(partition by ref_no) - она ​​определяет минимальную дату для ref_no), если текущая строка msgcreateddt больше, чем эта минимальная дата

2 голосов
/ 22 марта 2020

С ROW_NUMBER() оконной функцией:

insert into Table2 (ref_no, msgcreateddt, remarks)
select t.ref_no, t.msgcreateddt,
  case when t.rn1 > 1 then 'Duplicate' end
from (  
  select *,
    row_number() over (partition by ref_no order by msgcreateddt) rn1,
    row_number() over (partition by ref_no, msgcreateddt order by (select null)) rn2
  from Table1
) t  
where t.rn2 = 1

См. Демоверсию . Результаты:

>   ID | Ref_No | MsgCreatedDt            | Remarks  
> ---: | :----- | :---------------------- | :--------
> 1    | Ref1   | 2020-03-22 17:39:00.000 | null     
> 2    | Ref1   | 2020-03-22 17:42:00.000 | Duplicate
> 3    | Ref1   | 2020-03-22 18:10:00.000 | Duplicate
> 4    | Ref2   | 2020-03-22 16:11:00.000 | null 
...