2012-01-25 38 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

只是满足方式,非常感谢! :) –