访问内部联接以选择具有最大日期的记录,以便从另一个表中区别地选择记录

时间:2016-06-08 19:40:41

标签: sql ms-access

我正在使用Access并编写查询来连接另一个具有多个具有相同ID的记录的表。因此,我只需要使用MAX日期获取记录以仅获取1条记录。我一直收到语法错误。

这是我对另一张桌子的正常内部加入:

SELECT
table2.NameDesc,
FROM [table1] 
INNER JOIN
        (
            SELECT  [MyDataTable].[ID], [MyDataTable].[NameDesc], MAX( [MyDataTable].[MyDate]) as RecentDate
            FROM    [MyDataTable]
            GROUP BY  [MyDataTable].[ID]          
        ) table2
ON [table1].[ID] = table2.[ID];

通常在我的内部联接声明中,我这样写:

INNER JOIN [table3] ON [table1].[ID] = [table3].[ID])

所以我需要在MAX日期只获取1条记录。我终于能够了 单击“保存”但是当我单击DateSheetView时,出现以下错误:

"Your query does not include the specified expression "NameDesc" as part of an aggregate function"

我是[]括号的访问查询,与sql server不同。

如何让这个Access查询工作并从另一个表中获取具有最大日期的记录?

任何帮助都是适用的。

由于

1 个答案:

答案 0 :(得分:1)

当您使用聚合函数(如MAX)时,您需要包含作为组的一部分返回的所有其他列。为了使查询无错误地运行,您可以这样做:

    SELECT
    table2.NameDesc
    FROM [table1] 
    INNER JOIN
    (
        SELECT  [MyDataTable].[ID], 
                [MyDataTable].[NameDesc], 
                MAX([MyDataTable].[MyDate]) as RecentDate
        FROM    [MyDataTable]
        GROUP BY  [MyDataTable].[ID],
                  [MyDataTable].[NameDesc]           
    ) table2
    ON [table1].[ID] = table2.[ID];