2015-02-09 81 views
0

我对Access非常陌生,所以我确信这很简单。我不确定我是否拥有最好的科目。无法从分组记录中获取最新记录

我有一个OwnerNames表包含这样的数据:

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 

我想查询他们,让我得到了TMKFKName表中的最新时间戳记录。这用于从表单中查找。所以,如果我查找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。 A HAVING条款似乎没有什么区别。重新排序组中的字段没有什么区别。

回答

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%')