2017-10-19 128 views
0

我花了一些时间在StackOverflow上寻找这个答案,并尝试了一堆这些解决方案,但没有运气。我觉得我错过了一些小事,但我无法解决它。注 - 学习SQL并使用Access,因为这是工作使用的。MS Access SQL - 每个顾问的最新记录ID

我有2和表1中有(列顾问信息:顾问ID,姓,名,活动(是或否复选框)第二台都有自己每周号码(列: AutoGenID,顾问ID,WeekOf(日期),全面服务,咨询,分类,重新分配,RecruitmentSrvs),并加入ConsultantID(主键)

我建立了一个简单的查询来加入2表,并显示所有结果只为活跃的顾问在qry_Join中(任何标记为未激活的人不会显示在此查询中)qry_Join返回顾问ID,名,&姓(来自tbl_Consultants)然后WeekOf(日期),FullService,咨询,分类,重新分配,Recruitm来自tbl_WeeklyNumbers的entSrvs。

问:

我想有一个查询,只显示最近WeekOf(日期)每个顾问项目。

问题:我使用

SQL低于但我遇到的问题是,如果ConsultantID#的3,4,5,6,7 &使用2017年10月11日的日期和那么ConsultantID#8将使用10/12/2017,因为查询最近才会返回ConsultantID#8的行。我需要它仍然会返回所有其他顾问最近行以及即使他们是一个日期ConsultantID之前#787-8

SQL:

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

退房DATEPART(): SELECT ConsultantID,名字,WeekOf,USFullService,USConsulting,分类,重新分配, RecruitmentSrvs FROM qry_Join Where DATEPART(wk,WeekOf)=(SELECT MAX(DATEPART(wk,WeekOf))FROM qry_Join) –

回答

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) 
+0

感谢发布此工作很好。只有一个问题,我看到你说qry_join为“q”,那么“s”是做什么的?该系统如何解释,因为我没有维度(对不起,如果这是错误的词)它在任何地方? –

+0

这些是别名。您在查询中看到,我使用'.WeekOf',以确保我正在使用我刚刚命名为's'的查询中的'WeekOf'field。我还将's.ConsultantID'(子查询的'ConsultantID')与'q.ConsultantID'(主查询的'ConsultantID')进行比较。因为我使用相同的查询两次,所以需要它。因为's'在主查询中超出了范围,所以在那里并不需要(但是您可以在所有字段之前添加'q.'来更加明确) –

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 

在您的查询的问题,下面的查询会在整个表中的最大日期。而最大ID只匹配一名顾问。所以,你得到一个行

WeekOf = (SELECT MAX(WeekOf) FROM qry_Join) 

下面的查询会给每个顾问的最大日期。这样你就可以加入最大日期和顾问ID来获取每个顾问的细节在其最新weekoff

SELECT MAX(WeekOf) maxwkof ,ConsultantID cid 
       FROM qry_Join 
       GROUP BY ConsultantID 
+0

对于SQL来说,这是一个全新的东西,您的答案是否有优势?下面的答案?我只是想了解这种差异以及系统如何运作?谢谢! –

+1

上一个被称为co相关子查询(在子查询中引用外部查询参数)。在这里我收集所有顾问ID和他们相应的最大周转,然后检索相应的结果。性能,这取决于数据库。所以你必须同时运行并选择适合你的更快的工作。 – Valli

+0

'AND = cid'应该是'AND ConsultantID = cid',你可能要考虑把'WHERE'条件移到'INNER JOIN'''ON'条件。 –