2014-12-03 64 views
0
f1  f2  f3 
---------------- 
10  20  30 
10  15  50 
11  12  25 
11  79  13 

通过f1进行分组,如何获取最大f2及其对应的f3?SQL Group By并将另一列中的列和其对应值聚合

f1  f2  f3 
---------------- 
10  20  30 
11  79  13 
+0

这是一个[标签:最大正按组]问题,其中[这个问题] (http://stackoverflow.com/questions/7515354/optimal-performing-query-for-latest-record-for-each-n)就是一个例子。 – 2014-12-03 14:21:55

回答

1

你能做到这样

SELECT t1.f1 
,  t.f2 
,  t1.f3 
FROM  tbl t1 

cross apply (SELECT max(f2) f2 
    FROM tbl 
    GROUP BY f1) t 
WHERE t1.f2=t.f2 

enter image description here

1

您可以通过F1使用CTE与ROW_NUMBER,分区,并选择每个仅第一行(按F2降序排序,这将给你最大F2)

with cte as (select 
       f1, 
       f2, 
       f3, 
       row_number() over(partition by f1 order by f2 desc) rn 
      from t) 
select 
    f1, 
    f2, 
    f3 
from cte 
where rn = 1 

看到SqlFiddle

1

你想用row_number()

select t.* 
from (select t.*, row_number() over (partition by f1 order by f2 desc) as seqnum 
     from table t 
    ) t 
where seqnum = 1; 
1

您也可以使用这个(WIT豪特RN):

SELECT DISTINCT a.f1,x.f2,x.f3 
FROM YourTable a 
CROSS APPLY (SELECT TOP 1 f2,f3 
      FROM YourTable b 
      WHERE a.f1 = b.f1 ORDER BY b.f2 DESC) x