Sql 删除doublon内部联接
如何从预算中仅选择前1名公司以删除重复记录Sql 删除doublon内部联接,sql,sql-server,Sql,Sql Server,如何从预算中仅选择前1名公司以删除重复记录 update r set Comp = t.Comp from [QlikDataWarehouse].[dbo].[Vente]r with (NOLOCK) inner join [QlikDataWarehouse].[dbo].[Budget] t on t.[Code Site] = r.[Code Site] and t.[Code Rayon] = substring(r.[Code Struct
update r
set Comp = t.Comp
from [QlikDataWarehouse].[dbo].[Vente]r with (NOLOCK) inner join
[QlikDataWarehouse].[dbo].[Budget] t
on t.[Code Site] = r.[Code Site] and
t.[Code Rayon] = substring(r.[Code Structure],1,4) and
t.[Date Time] = convert(date,r.[Date Time])
where r.[Date Time] >= '2015-01-01 00:0:00.000';
试着这样做:
with topComp as (
select t.[Code Site], t.[Code Rayon], t.[Date Time], max(t.[Comp])
from [QlikDataWarehouse].[dbo].[Budget] t
group by t.[Code Site], t.[Code Rayon], t.[Date Time]
);
update r
set Comp = t.Comp
from [QlikDataWarehouse].[dbo].[Vente]r with (NOLOCK) inner join
topComp t
on t.[Code Site] = r.[Code Site] and
t.[Code Rayon] = substring(r.[Code Structure],1,4) and
t.[Date Time] = convert(date,r.[Date Time])
where r.[Date Time] >= '2015-01-01 00:0:00.000';
如果我理解正确,您对
预算表有多个匹配项,您只需要一个。如果是,则使用交叉应用
而不是加入
。例如,要获取最新记录,请执行以下操作:
update r
set Comp = t.Comp
from [QlikDataWarehouse].[dbo].[Vente]r with (NOLOCK) cross apply
(select top 1 t.*
from [QlikDataWarehouse].[dbo].[Budget] t
where t.[Code Site] = r.[Code Site] and
t.[Code Rayon] = substring(r.[Code Structure],1,4) and
t.[Date Time] = convert(date,r.[Date Time])
order by t.[Date Time] desc
) t
where r.[Date Time] >= '2015-01-01 00:0:00.000';
我认为您可以使用与中相同的方法。
如果没有Id
列,您可以在[日期时间]
上执行大于。您的问题对我来说没有多大意义。为什么你想要top 1,这样你就可以复制?我不太明白。如果您试图删除,为什么要使用update?update语句和NOLOCK,至少我不想知道会发生什么…只是让您知道。在这样的更新中使用NOLOCK可能会损坏索引,并且自2005年以来,该语法已被弃用。