MS Access SQL - 每个顾问ID的最新记录

时间:2017-10-19 20:17:48

标签: sql ms-access greatest-n-per-group

我花了一些时间在StackOverflow上寻找这个答案并尝试了一堆没有运气的解决方案。我觉得我错过了一些轻微的东西,但我无法解决它。注意 - 学习SQL并使用Access,因为这是工作的用途。

我有2个表,其中1个有顾问信息(列:顾问ID,名字,姓氏,活动(是或否复选框)。第二个表有他们的每周数字(列: AutoGenID,顾问ID,WeekOf(日期),FullService,咨询,分类,重新分配,RecruitmentSrvs)并在ConsultantID(主键)上加入

我构建了一个简单的查询来加入2个表并仅显示qry_Join中活跃顾问的所有结果(任何标记为未激活的人都不会在此查询中显示)qry_Join返回顾问ID,名字和&姓氏(来自tbl_Consultants),然后是来自tbl_WeeklyNumbers的WeekOf(Date),FullService,Consulting,Classified,Reallocations,RecruitmentSrvs。

问题:

我希望有一个查询,只显示每个顾问最近的WeekOf(Date)条目。

问题:

我正在使用的SQL如下,但我遇到的问题是,如果ConsultantID#的3,4,5,6和& 7使用10/11/2017日期,然后ConsultantID#8使用10/12/2017,查询将仅返回ConsultantID#8的行,因为它是最近的。我需要它仍然返回所有其他顾问最近的行,即使它们是ConsultantID#8s之前的日期

SQL:

SELECT ConsultantID, FirstName, WeekOf, USFullService, USConsulting, Classified, Reallocations, RecruitmentSrvs
FROM qry_Join
Where WeekOf = (SELECT MAX(WeekOf) FROM qry_Join)

2 个答案:

答案 0 :(得分:1)

只需将ConsultantID传递给子查询:

SELECT ConsultantID, FirstName, WeekOf, USFullService, USConsulting, Classified, Reallocations, RecruitmentSrvs
FROM qry_Join q
Where WeekOf = (SELECT MAX(s.WeekOf) FROM qry_Join s WHERE s.ConsultantID = q.ConsultantID)

答案 1 :(得分:1)

SELECT  ConsultantID, 
        FirstName, 
        WeekOf, 
        USFullService, 
        USConsulting, 
        Classified, 
        Reallocations, 
        RecruitmentSrvs
   FROM qry_Join INNER JOIN
        (SELECT MAX(WeekOf) maxwkof ,ConsultantID cid
          FROM qry_Join 
          GROUP BY ConsultantID )
   ON ConsultantID = cid  
     WHERE maxwkof = WeekOf

您的查询中的问题是,以下查询提供整个表中的最大日期。而且最大内容只匹配一名顾问。所以你得到一行

 WeekOf = (SELECT MAX(WeekOf) FROM qry_Join)

以下查询将给出每位顾问的最长日期。因此,您可以加入最长日期和顾问ID,以获取最新周末

中每位顾问的详细信息
SELECT MAX(WeekOf) maxwkof ,ConsultantID cid
              FROM qry_Join 
              GROUP BY ConsultantID