2015-02-09 108 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%')