无法从分组记录中获取最新记录

时间:2015-02-09 02:53:07

标签: sql ms-access group-by subquery max

我对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条款似乎没有什么区别。重新排序分组中的字段不会产生影响。

1 个答案:

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