通过SQL Server中的键列删除重复项

时间:2014-10-29 08:08:28

标签: sql sql-server duplicate-removal

在SAS中,如果我想删除带有重复项的已排序数据,我可以使用proc sortnoduprecs选项。并且nodupkey选项可以通过某些键列删除重复项

例如

proc sort data=HAVE out=WANT nodupkey;by var1, var2;run;

在SQL Server中,我知道select distinct *可以产生类似proc sort noduprecs的内容。但是如何生成类似于proc sort nodupkey;by var1, var2在SAS中的输出? (如果存在重复项,则返回第一个值)

修改

通过使用max之类的摘要功能,可以删除重复项,同时返回group by语句中未指定的最大列。

select key1, max(var1) as var1, key2, key3, max(var2) as var2, max(var3) as var3
from #HAVE
group by key1, key2, key3 

但我想要的是返回(var1,var2,var3)的第一个组合。

鉴于

key1 var1 key2 key3 var2 var3
K1   20   K2   K3   30   BB
K1   10   K2   K3   40   AA

理想的输出是

key1 var1 key2 key3 var2 var3
K1   20   K2   K3   30   BB

不是

key1 var1 key2 key3 var2 var3
K1   20   K2   K3   40   AA

1 个答案:

答案 0 :(得分:3)

根据你的评论你有一个时间戳,使用这个时间戳可以选择key1,key2,key3的“第一”组合

这是一个为key1,key2,key3的每个组合选择早期数据集的解决方案

;WITH CTE
AS
(
SELECT 
  key1, var1, key2, key3, var2, var3, 
  row_number() over (partition by key1, key2, key3 order by timestamp) rn
FROM 
  #HAVE
)
SELECT 
  key1, var1, key2, key3, var2, var3
FROM
  CTE
WHERE
  rn = 1