2016-10-23 3 views
0

ich einen Tisch haben, wie folgt:Access SQL Aggregat mit beitreten

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 | 
+----+------+------+------+ 

würde Ich mag diese Tabelle zu reduzieren, indem nur die Datensätze auszuwählen, die den höchsten Wert in fldC in Bezug auf Feld ID haben, so dass wir am Ende mit:

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

ich mit reduzieren:

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

Aber ich habe Probleme versucht zu schließen Felder fldA und fldB. Ich bin mir sicher, dass die Antwort in einem Inner Join und etwas Aliasing liegt, aber die Dinge nicht funktionieren lassen.

Antwort

0

Etwas wie:

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

Vielen Dank dafür. Mit einer kleinen Änderung (= maxC) bis (= b.maxC) funktionierte alles einwandfrei. Prost nochmal. Um mir das zu verdeutlichen, wählen wir zunächst die gesamte Tabelle 1. und dann Inner Joining für die Ergebnisse der Aggregat-Unterabfrage - aber nur dort, wo beide Datensatz-IDs übereinstimmen und zu einem einzelnen Ergebnis passen, indem sie zur ID-Übereinstimmung hinzugefügt werden. UND a.fldC = b.maxC ". Dies führt NUR zu den Datensätzen in der Aggregatunterabfrage mit den hinzugefügten ASSOCIATED-Feldern aus der äußeren Abfrage. Scheint das eine Beschreibung? Wenn ja, dann denke ich, dass ich die Dinge besser verstehe. – Duncan20

+0

Ja, ich denke du hast genau verstanden, wie es funktioniert hat. Sie wollten alle Datensätze mit der maximalen FldC für jede einzelne ID. Sie hatten diesen Teil der Abfrage bereits, aber Sie benötigten alle Felder und nicht nur ID und FldC. Der einfachste Weg, um von dort weiterzumachen, bestand darin, erneut aus der Tabelle auszuwählen und für jede ID nur die Zeilen zurückzugeben, in denen fldC gleich der maximalen fldC war, die Sie bereits gefunden haben. In SQL tgere gibt es andere Möglichkeiten, dies zu erreichen, aber ich bezweifle, dass sie in MS Access verwendet werden können (ich würde eine max (fldC) über (Partition von ID)) – Insac

+0

Wenn Sie nichts dagegen haben, werde ich bearbeiten die Antwort, um das Problem, das Sie gefunden haben, zu korrigieren. Ich dachte, es sei nicht notwendig, da es das einzige Feld namens maxC war, aber zugegebenermaßen konnte und kann ich es bis jetzt nicht testen. – Insac