我对Access非常陌生,所以我确信这很简单。我不确定我是否有最好的主题。
我有一个Owner
和一个Names
表,其中包含如下数据:
Owner Names
TMKFK NID ... NIDFK Last ModDate
7721011 45 45 Smith 1/18/15
7721011 137 137 Jones 2/1/15
7721012 45 45 Smith 1/18/15
我正在尝试查询它们,以便在TMKFK
表中获取最新时间戳记录的Name
。这用于从表单查找。因此,如果我查找Smi*
,我希望得到7721012
。
经过一番环顾这个网站和其他地方并查看partition over
我得出结论答案必须使用子查询,但我无法弄清楚要放在哪里。这就是我陷入困境的地方:
SELECT Owner.TMKFK
FROM Owner INNER JOIN Names ON Owner.NID = Names.NIDFK
GROUP BY Owner.TMKFK, [Owner Name].Last, [Owner Name].M
WHERE (Owner.TMKFK=7721011 Or Owner.TMKFK=7721012)
AND Names.Last Like "Smith"
AND Names.ModDate=(SELECT Max(Names.ModDate) FROM Names);
此操作失败,因为子查询返回整个表中的最大日期,而不仅仅是具有相同TMKFK
的两个记录。 HAVING
条款似乎没有什么区别。重新排序分组中的字段不会产生影响。
答案 0 :(得分:0)
获取最大日期的子查询需要仅限于相关所有者。这些方面的东西:
SELECT Owner.TMKFK
FROM Owner INNER JOIN Names ON Owner.NID = Names.NIDFK
WHERE (Owner.TMKFK=7721011 Or Owner.TMKFK=7721012)
AND Names.Last Like 'Smith%'
AND Names.ModDate=(SELECT Max(Names.ModDate)
FROM Names
WHERE NIDFK = Owner.NID
)
不要认为你需要GROUP BY
。不知道Access语法,但LIKE
通常意味着像%
这样的通配符,字符串应该是单引号。如果你想要不区分大小写的搜索:
AND UPPER(Names.Last) LIKE UPPER('Smith%')