Получение последней национальности для работника - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь получить список сотрудников и их национальностей:

 select concat([Firstname],[Lastname]) as 'Full name',[C].[Label] as 'Nationality' FROM [Employee] [E]
  left join [AF_AdminFile] [AFA] on E.AdminFileId=AFA.AdminFileId
  left join  [AF_Nationality] [AFN] on AFN.AdminFileId= AFA.AdminFileId
  left join [Country] [C] on AFN.CountryId=C.ID

В результате получаю следующее:

enter image description here

В этом случае работник изменил свою национальность, поэтому в таблице Employee есть атрибут с именем UpdatedDate, который отличается от NULL (после изменения национальности)

Когда я добавляю условие даты в свой запрос как получение max(UpdatedDate), чтобы получить последнюю запись для "DavidFELTEN", я получаю тот же результат, что и на картинке выше:

 select concat([Firstname],[Lastname]),[C].[Label] as 'Nationality' FROM [Employee] [E]
  left join [AF_AdminFile] [AFA] on E.AdminFileId=AFA.AdminFileId
  left join  [AF_Nationality] [AFN] on AFN.AdminFileId= AFA.AdminFileId
  left join [Country] [C] on AFN.CountryId=C.ID
  where [E].UpdatedDate = (select max([Emp].UpdatedDate) from [Employee] [Emp]
                            where [Emp].EmployeeId=[E].EmployeeId)

1 Ответ

3 голосов
/ 11 июня 2019

Использование ROW_NUMBER:

WITH cte AS (
    SELECT CONCAT([Firstname], [Lastname]) AS full_name,
        [C].[Label] AS Nationality,
        ROW_NUMBER() OVER (PARTITION BY E.EmployeeId ORDER BY UpdateDate DESC) rn
    FROM [Employee] [E]
    LEFT JOIN [AF_AdminFile] [AFA]
        ON E.AdminFileId = AFA.AdminFileId
    LEFT JOIN [AF_Nationality] [AFN]
        ON AFN.AdminFileId = AFA.AdminFileId
    LEFT JOIN [Country] [C]
        ON AFN.CountryId = C.ID
)

SELECT
    full_name,
    Nationality
FROM cte
WHERE rn = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...