我有一张像这样的表:
ID Value1 Value2 ...
1 4 80
1 5 99
1 5 100
2 7 30
2 7 33
2 22 11
现在,我想保留所有观察结果,对于每个ID和Value1,Value2的值最高,即结果应如下所示:
ID Value1 Value2 ...
1 4 80
1 5 100
2 7 33
2 22 11
有没有人有任何想法?
最佳
答案 0 :(得分:1)
使用Group By子句来实现结果:
public class User
{
public user_info user_info { get; set; }
public Dictionary<string, reportInfo> reports { get; set; }
}
答案 1 :(得分:1)
如果使用SAS并且想要避免使用SQL,则可以按降序对所有变量进行排序,并使用带有first.ID语句的by语句仅获取第一个值(排序后的值最高)。
proc sort data = have;
by ID descending Value1 descending Value2 ...
run;
data want;
set have;
by ID;
if first.ID;
run;
注意:根据数据的大小,由于对多列进行排序,这可能不是最有效的。
答案 2 :(得分:0)
假设支持ROW_NUMBER
select *
from (select t.*
,row_number() over
(partition by ID,Value1 order by Value2 desc) as rn
from my_table
) t
where rn = 1
答案 3 :(得分:0)
只需使用Group By with Max功能
SELECT ID, VALUE1 , MAX(VALUE2) AS VALUE2
FROM TABLE1
GROUP BY ID, VALUE1
答案 4 :(得分:0)
使用group by并加入子选择可以获得
SELECT *
FROM the_table t1
JOIN (
SELECT id, value1, MAX(value2) AS value2
FROM the_table
GROUP BY ID ,value1
) t2 ON t1.id = t2.id
AND t1.value1 = t2.value1
AND t1.value2 = t2.value2
答案 5 :(得分:0)
试试这个。
select ID ,value1,Value2 from
( select ID ,value1,Value2,row_number() over
( partition by ID,Value1 order by Value2 desc )as rnk
from
#TableName
)a where rnk =1
OR
select ID ,Value1,max(Value2)from
#TableName
group by ID ,Value1
答案 6 :(得分:0)
这是SAS版本。 id
中的proc summary
语句将自动返回最大值。 class
语句等同于group by
。 drop
语句删除了过程中创建的自动变量(_type_
,_freq_
)。
data have;
input ID Value1 Value2;
datalines;
1 4 80
1 5 99
1 5 100
2 7 30
2 7 33
2 22 11
;
run;
proc summary data=have nway;
class id value1;
id value2;
output out=want (drop=_:);
run;