2012-01-25 37 views
3

我有這個查詢,我試圖得到零售商店賣家的最大年齡(有多個城鎮),並顯示多個,如果有多個人具有相同(最大)年齡。我使用的是Microsoft Access 2010中下面是該查詢:MS Access - 綜合功能和最大

SELECT Linnad.Linn, Myyjad.Nimi, Max(Myyjad.Vanus) As Vanus 
FROM Linnad INNER JOIN Myyjad ON Linnad.LinnID = Myyjad.LinnID 
GROUP BY Linnad.Linn, Myyjad.Nimi 
ORDER BY Linnad.Linn; 

的問題是,它似乎忽略MAX,只是表示所有的值,我不能Myyjad.Nimi刪除該組,因爲它給我一個錯誤,聚合函數不包含在Myyjad.Nimi中。

和輸出應該是: 鎮 - 姓名 - 馬克斯(年齡)

此外,林恩=鎮,Nimi敬上=名稱和Vanus =年齡。

+1

如果您將表格和列名翻譯爲英文,理解您嘗試做什麼會容易得多。 –

+0

試過了,我會複製一條評論:我試圖達到的目標是獲得賣家的最大年齡,如果有多個具有相同最大年齡的人展示他們的名字,他們的名字就會顯示出來。但是LinnID(TownID)將它們分離到不同的城市,但仍然很少有相同(最大)年齡的賣家。希望現在更清楚,抱歉讓人困惑。而且,對於我所需要的不清楚,我感到抱歉,但我明白了,並且感謝所有人! :) –

+0

我的意思是,很難讀懂你的SQL語句而不知道你的語言。 –

回答

1

我想這可能是你找什麼:

SELECT L.Linn, M.Nimi, M.Vanus 
FROM Linnad As L, 
(
SELECT M2.LinnID, M2.Nimi, M2.Vanus 
FROM Myyjad As M2 
WHERE M2.Vanus = (SELECT Max(Z.Vanus) FROM Myyjad As Z WHERE Z.LinnID = M2.LinnID) 
) As M 
WHERE M.LinnID = L.LinnID 

此進行分選得到的林恩ID的所有Nimi敬上的顯示最大Vanus列表,然後我們鏈接此子選擇通過LinnID返回Linnad表。

+0

哇,那就對了! :) –

+0

:)唷,我知道訪問有時可能會有趣的使用子選擇作爲命名錶,很樂意幫助,雖然 –

1

我想你想:

SELECT Linnad.Linn, Myyjad.Nimi, Myyjad.Vanus 
FROM Linnad INNER JOIN Myyjad ON Linnad.LinnID = Myyjad.LinnID 
WHERE DateValue(Myyjad.Vanus) 
     = (SELECT Max(DateValue(Myyjad.Vanus)) FROM Myyjad) 
ORDER BY Linnad.Linn 

前每組N:

SELECT Linnad.Linn, Myyjad.Nimi, Myyjad.Vanus 
FROM FROM Linnad INNER JOIN Myyjad ON Linnad.LinnID = Myyjad.LinnID 
WHERE Myyjad.ID In (
    SELECT Top 1 m.ID 
    FROM Myyjad m 
    WHERE m.LinnID=Linnad.ID 
    ORDER BY m.Vanus Desc, m.ID) 
+0

然後它顯示我只有一個城鎮,其中有多個=/ –

+0

我懷疑你也可能有一個時間元素。我將添加DateValue。 – Fionnuala

+0

我需要顯示每個城鎮的零售商的最大年齡,並且沒有日期值,因爲townID只是2個表格之間的關係。而年齡只是一個整數,只是人的年齡(如68)。 –

1

分組由林恩(鎮)和Nimi敬上(姓名)告訴數據庫引擎給你的每一個行鎮和名字的組合,並向您展示每種組合的最大Vanus(年齡)。從邏輯上講,這不是你想要的。你需要每個人的姓名,其年齡與該城鎮的最大年齡相同。

首先驗證您可以檢索每個LinnID的最大年齡。

SELECT 
    LinnID, 
    Max(Vanus) As MaxOfVanus 
FROM 
    Myyjad 
GROUP BY LinnID; 

如果這樣的作品,你可以將它保存爲「qryTownAge」,然後用Linnad用它在另一個查詢,你加入它(上LinnID)。這將允許您檢索匹配的Linn。

SELECT l.LinnID, l.Linn, q.MaxOfVanus 
FROM 
    Linnad AS l 
    INNER JOIN qryTownAge AS q 
    ON l.LinnID = q.LinnID 
ORDER BY l.Linn; 

如果可行,請將其另存爲qryTownAge2。然後嘗試這個查詢。

SELECT q.Linn, q.MaxOfVanus, m.Nimi 
FROM 
    qryTownAge2 AS q 
    INNER JOIN Myyjad AS m 
    ON (
     m.LinnID = q.LinnID 
     AND m.Vanus = q.MaxOfVanus 
     ) 
ORDER BY q.Linn; 

如果一切正常,您可以創建一個完成所有工作的單個查詢。但是,一步一步做,應該可以幫助我們找出錯誤。

+0

等一下,我會試試:) –

+0

只是滿足方式,非常感謝! :) –