Sql 使用第二个表中的最新值更新查询

Sql 使用第二个表中的最新值更新查询,sql,ms-access,vba,ms-access-2013,Sql,Ms Access,Vba,Ms Access 2013,我是一个在访问方面相对新手,问题远远超出我的技能 我正在一个名为CurrentEmployees的访问表中存储有关员工的信息,该表包含名字、姓氏、员工ID等 由于员工频繁换班/换岗,我需要一种方法来存储他们的职称、轮班等历史记录,而不必为一名员工存储两条记录,其中包含大量冗余数据 因此,我创建了第二个名为Assignment History的表,其中包含员工ID之间的关系,同一个员工ID可以有多个条目,如下所示 Employee ID | Assigned As Of | Job Title |

我是一个在访问方面相对新手,问题远远超出我的技能

我正在一个名为CurrentEmployees的访问表中存储有关员工的信息,该表包含名字、姓氏、员工ID等

由于员工频繁换班/换岗,我需要一种方法来存储他们的职称、轮班等历史记录,而不必为一名员工存储两条记录,其中包含大量冗余数据

因此,我创建了第二个名为Assignment History的表,其中包含员工ID之间的关系,同一个员工ID可以有多个条目,如下所示

Employee ID | Assigned As Of | Job Title | Shift
1234        | 01/01/2017     | Manager   | A
1234        | 12/01/2016     | Salesman  | A 
5678        | 12/01/2016     | Salesman  | B
现在,出于各种形式的原因,我想将最新的值放回我的第一个表Current Employees(当前员工)中的当前职位下,如下所示

Employee ID | FName         | Last Name | Current Job
1234        | John          | Smith     | Manager
5678        | Steve         | Adams     | Salesman
我所能得到的最接近的结果是在代码所在的第三个表中进行CREATETABLE查询

SELECT a.* 
INTO CurrAssign
FROM AssignmentHistory AS a 
INNER JOIN (
     SELECT max(a.AssignedAsOf) AS LatestDate, a.EmployeeID 
     FROM AssignmentHistory AS a GROUP BY a.EmployeeID)  
AS SubMax 
ON (a.EmployeeID = SubMax.EmployeeID) 
AND (a.AssignedAsOf = SubMax.LatestDate);
关于如何将此查询更改为当前员工的更新,是否有任何帮助?还是有更好的方式格式化和存储这些信息?

您可以尝试一种简单的“查找”方法。这样行吗

SELECT ce.EmployeeID, ce.FName, ce.LName,
(SELECT TOP 1 ah.[Job Title] FROM AssignmentHistory ah WHERE ah.EmployeeID = ce.EmployeeID ORDER BY ah.AssignedAsOf DESC) AS CurrentJob--Look up Current Job
FROM CurrentEmployee ce

因为MS Access需要更新查询,请考虑使用嵌套域集合,<代码> DLookUp < /C> >和<代码> DMAX < /C> >查询:

更新员工e
集合e.[当前职务]=DLookUp(“[职务]”,“[分配历史]”,
“[员工ID]=”&e[员工ID]&”
“和[分配自]=#”&
DMax(“[分配截止日期]”,“[分配历史]”,
“[员工ID]=”&e[员工ID]&“#”)