2014-12-03 48 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