在Access DB的SQL查询中返回包含3个不同字段的多列

在Access DB的SQL查询中返回包含3个不同字段的多列,sql,select,distinct,Sql,Select,Distinct,我试图创建一个返回多个字段的查询,将前3个字段保留为不同的列,并返回上次修改日期的值。查询字段中的一些变量应该来自多个表,其中一个也有一个True/False条件。需要三个不同的字段,因为它们的组合与其他返回参数相关联 这些表格大致如下所示 表a: ID | Sc | Country | TechID | VarA | ... | VarX(T/F) | LastModified 1 | 1 | AA | 1 | x | ... | T | 1-

我试图创建一个返回多个字段的查询,将前3个字段保留为不同的列,并返回上次修改日期的值。查询字段中的一些变量应该来自多个表,其中一个也有一个True/False条件。需要三个不同的字段,因为它们的组合与其他返回参数相关联

这些表格大致如下所示

表a:

 ID | Sc | Country | TechID | VarA | ... | VarX(T/F) | LastModified
  1 |  1 |    AA   |    1   |  x   | ... |     T     | 1-1-2017
  2 |  1 |    AA   |    1   |   z  | ... |     T     | 1-1-2017
  3 |  1 |    AA   |    2   |    y | ... |     T     | 1-1-2018
  4 |  1 |    AB   |    1   |   u  | ... |     T     | 1-1-2017
  5 |  2 |    AB   |    2   |   v  | ... |     T     | 1-1-2018
  6 |  3 |    AB   |    1   |   w  | ... |     F     | 1-1-2018
表b:

TechID | TechName | Categ | Units
   1   |   Tech1  |  Cat1 | M
   2   |   Tech2  |  Cat2 | N
   3   |   Tech3  |  Cat3 | P
其思想是查询返回类似这样的结果(当满足T/F标准时)。Sc国家/地区技术组合仅出现一次,最后一次修改的技术组合存在:

Sc' | Country' |TechName'| Units | Cat | VarA... | LastModified | 
 1  |    AA    |    1    |  ...  | ... |   ...   | 1-1-2018
 1  |    AB    |    2    |  ...  | ... |   ...   | 1-1-2017
 2  |    AB    |    1    |  ...  | ... |   ...   | 1-1-2018
到目前为止,我已经尝试了几行SQL语句,但都没有用。首先,使用Select DISTINCT,但该选项太“全面”

也尝试了此操作,但它会提示与聚合函数相关的错误:

SELECT a.Sc, a.Country, b.TechID, b.Units, b.Cat, a.VarA,..,a.VarX, Max(a.LastModified) AS MaxOfLastModified
FROM a INNER JOIN (b INNER JOIN a ON b.TechName = 
a.TechID) ON b.Cat = a.TechID
GROUP BY a.Sc, a.Country, a.TechID
HAVING (((a.VarX)=True));
关于如何进行这项工作,有什么想法/建议吗??任何指向先前相关答案的提示也将不胜感激

提前感谢!:)


编辑(2017.09.29):


这确实让事情变得明朗了一点

仅当从具有以下内容的单个表中调用字段时,我才设法使用某些字段执行查询:

SELECT a.Sc, a.Country, a.Tech, a.LastModified, a.VarA
FROM a INNER JOIN (SELECT Sc, Country, Tech, max(LastModified) AS lm FROM a GROUP BY Sc, Country, Tech)  AS dt ON (dt.lm=a.LastModified) AND (dt.Tech=a.Tech) AND (dt.Country=a.Country) AND (dt.Sc=a.Sc)
GROUP BY a.Sc, a.Country, a.Tech, a.LastModified, a.VarA, a.VarX
HAVING (((a.VarX)=Yes));
在尝试使用建议的内部JOIN命令从查找表添加字段时,我仍然在JOIN上遇到语法错误。我尝试的代码类似于:

SELECT a.Sc, a.Country, a.Tech, a.LastModified, a.VarA b.TechCategory
FROM a INNER JOIN (SELECT Sc, Country, Tech, max(LastModified) AS lm FROM a GROUP BY Sc, Country, Tech)  AS dt ON (dt.lm=a.LastModified) AND (dt.Tech=a.Tech) AND (dt.Country=a.Country) AND (dt.Sc=a.Sc)
INNER JOIN b ON Tech.Category=a.Tech
GROUP BY a.Sc, a.Country, a.Tech, b.TechCategory, a.LastModified, a.VarA, a.VarX
HAVING (((a.VarX)=Yes));

任何额外的指示都非常感谢

使用聚合查询获取
Sc
Country
TechID
的每个组合的最长日期,然后将其用作子查询,并将其连接回表
a
b
,以获取最终查询中的数据。大概是这样的:

select
    a.Sc, a.Country, b.TechName,
    b.Units, b.Category, b.Units, a.VarA, a.LastModified
from
    (Table_a as a
    inner join (
        select   Sc, Country, TechID, max(LastModified) as lm
        from     Table_a
        group by Sc, Country, TechID
        ) as dt on dt.Sc=a.Sc and dt.Country=a.Country and dt.TechID=a.TechID and dt.lm=a.LastModified)
    inner join Table_b as b on b.TechID=a.TechID

这确实让事情变得明朗了一点。我设法使查询与单个表中的字段一起运行。在尝试使用建议的第二个内部JOIN命令从查找表中添加字段时,查询在JOIN上仍遇到语法错误。我正在扩展新代码,作为对我原始问题的编辑。在您的编辑中,表
b
的连接没有引用表
b
,但它引用了
Tech.Category
,并且
Tech
不是定义的表或别名,而
Category
不是示例表
a
b
的一列。在同一联接中,示例表中不存在列
a.Tech
。您的示例不准确,或者代码有印刷或逻辑错误。
select
    a.Sc, a.Country, b.TechName,
    b.Units, b.Category, b.Units, a.VarA, a.LastModified
from
    (Table_a as a
    inner join (
        select   Sc, Country, TechID, max(LastModified) as lm
        from     Table_a
        group by Sc, Country, TechID
        ) as dt on dt.Sc=a.Sc and dt.Country=a.Country and dt.TechID=a.TechID and dt.lm=a.LastModified)
    inner join Table_b as b on b.TechID=a.TechID