在SQL Server中按键列删除重复项

在SQL Server中按键列删除重复项,sql,sql-server,duplicate-removal,Sql,Sql Server,Duplicate Removal,在SAS中,如果要删除包含重复项的已排序数据,可以使用proc sort和noduprecs选项。而nodupkey选项可以通过一些键列删除重复项 e、 g 在SQL Server中,我知道select distinct*可以生成类似proc sort noduprecs的内容。但是如何生成像proc sort nodupkey这样的输出;通过var1,var2在SAS中的作用是什么? (如果存在重复项,则返回第一个值) 编辑 通过使用类似于max的摘要功能,可以删除重复项,同时返回group

在SAS中,如果要删除包含重复项的已排序数据,可以使用
proc sort
noduprecs
选项。而
nodupkey
选项可以通过一些键列删除重复项

e、 g

在SQL Server中,我知道
select distinct*
可以生成类似
proc sort noduprecs
的内容。但是如何生成像
proc sort nodupkey这样的输出;通过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
不是

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

根据您的评论,您有一个时间戳,使用该时间戳可以选择键1、键2、键3的“第一”组合

这里有一个解决方案,可以为每个键1、键2、键3的组合选择earliers数据集

;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

从表中选择不同的列1、列2对您有用吗?我不需要在
SELECT
语句中包含其他列。没有key1、key2、key3的第一个组合。这完全没有道理。如果您有一个自动增量Id列或时间戳,我可能不理解语法。
row\u number()
是函数吗?数据中没有名为
timestamp
的现有列。我可以使用任何函数获取行索引作为
时间戳
?为什么
;具有正如()
?@GMTG所写的那样,您已经按照时间戳对数据进行了排序。这是无法解决的,如果您没有按此处使用的某些SQL语法(
row_number()
over
partition by
)排序的列,则SAS中的
proc SQL
不支持此语法。它可能在到另一个dbms的传递查询中工作。@user667489我觉得某些sas可以使用此脚本调用存储过程
key1 var1 key2 key3 var2 var3
K1   20   K2   K3   40   AA
;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