2016-10-21 17 views
0

を集約するために、非集計フィールドを追加します。MS AccessのSQLは、私は次の表を持っている

tableX 

+----+----+----+ 
| f1 | f2 | f3 | 
+----+----+----+ 
| 1 | a | 12 | 
| 2 | a | 54 | 
| 3 | b | 23 | 
| 4 | b | 18 | 
| 5 | b | 75 | 
+----+----+----+ 

私たちが得るようF2に関しては、F3で最高値に基づいてテーブルを削減したいと思います:

+----+----+----+ 
| f1 | f2 | f3 | 
+----+----+----+ 
| 2 | a | 54 | 
| 5 | b | 75 | 
+----+----+----+ 

私が使用して、F2とF3を減らすことができます。エイリアスを使用して(私は1つのソリューションは以下に近いと思い

SELECT f2, Max(f3) 
FROM tableX 
GROUP BY f2; 

を自己結合)、私はそれを動作させるために少しでも苦労しています - アクセスは、f1が集合体の一部ではないと不平を言います。

SELECT a.f1,a.f2, Max(a.f3) 
FROM tableX t1 
Inner Join tableX t2 
On t1.f1 = t2.f1 
GROUP BY t1.f2; 

答えて

1

あなたは正しい軌道に乗っていました。私はそれのために少しSQLのフィドルをした

select x.f1, x.f2, x.f3 
from tablex x 
join (
select f2, max(f3) as f3 
from tableX 
group by f2 
) j on j.f2 = x.f2 and j.f3 = x.f3 

:ここ

は私が思いついたものです。 http://sqlfiddle.com/#!9/7d4ac4/3

ms-accessをターゲットにしていませんが、動作するはずです。

+0

これは本当にありがとうございます。私はAccessの循環参照ポップアップを避けるために "max(f3)as f3"を "joinf3としてmax(f3)"に変更し、 "j.f3 = x.f3"を "j.joinf3 = x.f3"オフ。私はSQLのフィドルを好む - 前にそのサイトを見て、それを調べます。 – Jim

関連する問題