I have 2 tables:
Table 1
CREATE TABLE
What gives me:
select * from #Table1 +------------+-------+---------------------+ | EMPLOYEEID | Name | Title | +--------------------+---------------------+ | 1 | Tom | System Admin | | 2 | Bill | Server Admin | | 3 | John | Senior Server Admin | | 4 | Bob | IT Staff | | 5 | Jill | Senior IT Staff | +--------------------+---------------------+
table 2
CREATE TABLE
What gives me:
select * from #Table2 +----------------+-------+---------------------+-----------------+ | EMPLOYEEnumber | Name | positiontitle |datepositionstart| +----------------+-------+--------------------+-----------------+ | 1 | Tom | System Admin | 2014-07-03 | | 2 | Tom | Server Admin | 2014-08-13 | | 3 | Tom | Senior Server Admin | 2016-07-23 | | 4 | Bob | IT Staff | 2014-07-03 | | 4 | Bob | Senior IT Staff | 2016-10-15 | +------------------------+---------------------+-----------------+
How to update the employee header table1 based on the last position in table 2?
The code below does not get the most recent date, instead I get duplicate employees from Table 2 with the same dateposition parameter.
UPDATE Table1 SET E.TITLE = hre.[PositionTitle] FROM Table1 E JOIN Table2 hre on hre.EmployeeNumber = E.EMPLOYEEID WHERE E.Name = hre.Name AND datepositionstart = (SELECT MAX(datepositionstart) FROM table2 hre WHERE hre.EmployeeNumber = E.EMPLOYEEID)
Expected results:
+------------+-------+---------------------+ | EMPLOYEEID | Name | Title | +--------------------+---------------------+ | 1 | Tom | Senior Server Admin | | 2 | Bill | Server Admin | | 3 | John | Senior Server Admin | | 4 | Bob | Senior IT Staff | | 5 | Jill | Senior IT Staff | +--------------------+---------------------+
source share