2016-10-23 4 views
0

に参加:アクセスSQL集計は、次のように私は1つのテーブルを持っている

tableA 

+----+------+------+------+ 
| ID | fldA | fldB | fldC | 
+----+------+------+------+ 
| 1 | 123 | xx1 | 1 | 
| 1 | 124 | xx3 | 5 | 
| 2 | 543 | xx5 | 3 | 
| 2 | 465 | px3 | 2 | 
| 3 | 73 | ox6 | 7 | 
| 3 | 55 | ox7 | 24 | 
+----+------+------+------+ 

私がするように、フィールドIDに関してFLDCで最も高い値を持つレコードだけを選択することで、このテーブルを削減したいです私は減らすことができます

+----+------+------+------+ 
| ID | fldA | fldB | fldC | 
+----+------+------+------+ 
| 1 | 124 | xx3 | 5 | 
| 2 | 543 | xx5 | 3 | 
| 3 | 55 | ox7 | 24 | 
+----+------+------+------+ 

:我々は、で終わる

SELECT ID, Max(fldC) AS MaxC 
FROM tableA 
GROUP BY ID; 

しかし、私は、しようとしている問題を抱えていますフィールドfldAおよびfldB。答えはInner JoinとAliasingにありますが、動作させることはできません。

答えて

0

のような何か:このため

SELECT a.id, fldA, fldC, fldC 
    from tableA a 
     join 
     (SELECT ID, Max(fldC) AS MaxC 
     FROM tableA 
     GROUP BY ID) b 
     On a.fldc=b.maxC and a.id=b.id; 
+1

感謝します。マイナーチェンジ(= maxC)から(= b.maxC)までのすべてが完璧に機能しました。もう一度乾杯。私が理解するのを助けるために、まずテーブル全体を選択してから、集計サブクエリの結果について内部結合を行います。ただし、データセットIDが一致し、IDに追加することによって単一の結果に微調整するのは、 AND a.fldC = b.maxC "である。これにより、外部問合せのASSOCIATEDフィールドが追加された集計サブクエリのレコードのみが生成されます。これは説明のようですか?はいの場合、私は物事をよりよく理解し始めていると思う。 – Duncan20

+0

はい、あなたはそれがどのように機能しているかを正確に理解していると思います。単一のIDごとに最大fldCを持つすべてのレコードが必要でした。あなたはすでにクエリのその部分を持っていましたが、IDとfldCだけでなくすべてのフィールドが必要でした。そこから行く最も簡単な方法は、テーブルから再度選択し、fldCがすでに見つかった最大fldCと等しい行だけすべてのIDについて返すことでした。 SQL tgereでこれを達成する他の方法がありますが、私はそれらがMS Accessで使用できるかどうか疑問です(IDでパーティションを最大(fldC)使用します) – Insac

+0

あなたが気にしないなら、私は編集しますあなたが見つけた問題を解決する答え。私はmaxCと呼ばれる唯一のフィールドだったので、それは必要ではないと思ったが、確かに私はそれをテストできなかったし、テストすることもできなかった。 – Insac

関連する問題