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
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
你能做到這樣
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
您可以通過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
你想用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;
您也可以使用這個(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
這是一個[標籤:最大正按組]問題,其中[這個問題] (http://stackoverflow.com/questions/7515354/optimal-performing-query-for-latest-record-for-each-n)就是一個例子。 – 2014-12-03 14:21:55