2016-10-23 32 views
0

我有一個表,如下所示:訪問SQL聚集體加入

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

我想通過只選擇那些在fldC的最高值相對於域ID的記錄,以減少該表,使我們最終得到:

+----+------+------+------+ 
| 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和一些別名,但不能讓事情發揮作用。

回答

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),所有工作都完美無缺。再次歡呼。所以爲了幫助我理解,我們選擇整個表格1st,然後選擇Inner Joining on聚合子查詢的結果 - 但只有在兩個數據集ID匹配並通過添加ID匹配來微調單個結果的情況下匹配「 AND a.fldC = b.maxC「。這隻會導致聚合子查詢中的記錄與外部查詢中添加的ASSOCIATED字段。這似乎是一個描述?如果是,那麼我認爲我開始更好地理解事情。 – Duncan20

+0

是的,我想你已經明白它是如何工作的。你想要每個ID都有最高fldC的記錄。你已經有了這部分查詢,但你需要所有的字段,而不僅僅是ID和fldC。最簡單的方法是從表中再次選擇並返回每個ID只有fldC等於您已找到的最大fldC的行。在SQL tgere是其他方式來完成這一點,但我懷疑他們可以在MS Access中使用(我會使用max(fldC)over(按ID分區)) – Insac

+0

如果你不介意,我要編輯解決您找到的問題的答案。我認爲這不是必要的,因爲它是唯一一個叫做maxC的領域,但是我承認我現在不能也不能測試它。 – Insac