РЕДАКТИРОВАТЬ: RedsDevils Я отредактировал свой код и протестировал его на вашем примере. Это должно работать сейчас
Учитывая, что один и тот же сотрудник может сменить отдел или получить повышение по службе в ходе своей карьеры, мои два объединения ищут последнюю дату вступления в силу для каждого типа.
SELECT derived.[Effective Date],
derived.[Employee Name],
title1.[FieldValue] AS Title,
dept1.[FieldValue] AS Department
FROM
(
SELECT MAX([Effective Date]) AS [Effective Date], [Employee Name]
FROM TableA
GROUP BY [Employee Name]
) derived
-- Inner Join for TITLE
INNER JOIN TableA title1 ON derived.[Employee Name] = title1.[Employee Name]
AND title1.FieldType = 'Title'
AND title1.[Effective Date] = (SELECT MAX(title2.[Effective Date])
FROM TableA title2
WHERE title1.[Employee Name] = title2.[Employee Name]
AND title2.FieldType = 'Title')
-- Inner Join for DEPARTMENT
INNER JOIN TableA dept1 ON derived.[Employee Name] = dept1.[Employee Name]
AND dept1.FieldType = 'Department'
AND dept1.[Effective Date] = (SELECT MAX(dept2.[Effective Date])
FROM TableA dept2
WHERE dept1.[Employee Name] = dept2.[Employee Name]
AND dept2.FieldType = 'Department')
Сначала я создал производную таблицу , чтобы получить максимальную дату вступления в силу и имя сотрудника, и связал ее с именем «производная». Затем я был создан, чтобы присоединиться, чтобы узнать последнее название и отдел.