2017-04-05 9 views
0

누구든지 도움이 될지 궁금합니다.AdventureWorks2014 - 직위에 따라 최신 채용 정보 추출

Adventureworks2012 databse를 사용하여 Jobtitle을 기반으로 최신 고용자 목록을 반환하는 코드를 작성하려고합니다.

이 잘 작동하지만, 나는 그것을 할 수있는 더 좋은 방법이 확신 보인다
SELECT DISTINCT HREDH.BusinessEntityID, 
    HRE.JobTitle, 
    hre.HireDate 
FROM [HumanResources].[EmployeeDepartmentHistory] HREDH 
INNER JOIN HumanResources.Employee HRE ON HREDH.BusinessEntityID = HRE.BusinessEntityID 
    AND hre.BusinessEntityID = (
     SELECT TOP 1 BusinessEntityID 
     FROM HumanResources.Employee hre2 
     WHERE hre2.JobTitle = hre.JobTitle 
     ORDER BY HireDate DESC 
     ) 
ORDER BY HRE.JobTitle 

(문장의 시작 부분에 SELECT DISTINCT를 사용하지 않고 :

지금까지, 나는 다음과 같은이)

저는 혼자서 SQL을 배우려고 노력하고 있습니다. 그래서 여기에 대한 지식의 광대 한 도움을 주시면 감사하겠습니다! 작업 제목에 대한 고용 날짜가 그 직책에 대한 가장 높은 날짜와 동일 곳은 두 테이블의 조인에서 모든 행을 반환합니다

+0

왜 그렇게 확신합니까? – LONG

답변

0

감사합니다.

SELECT 
    HREDH.BusinessEntityID 
    ,HRE.JobTitle 
    ,hre.HireDate 
FROM [HumanResources].[EmployeeDepartmentHistory] AS HREDH 
    JOIN HumanResources.Employee AS HRE 
     ON HREDH.BusinessEntityID = HRE.BusinessEntityID 
WHERE HRE.HireDate = (SELECT MAX(HireDate) FROM HumanResources.Employee AS _HRE WHERE HRE.JobTitle = _HRE.JobTitile) 
ORDER BY HRE.JobTitle 
+0

고마워요, 앤서니! 이것은 대부분의 작업을 수행하는 것처럼 보이지만 쿼리를 실행할 때 여전히 중복 레코드를 반환합니다. 이것이 내 쿼리에서 DISTINCT 문을 사용해야하는 이유입니다. 복제본을 제거하는 다른 방법을 알고 있습니까? – Rosscoasks

+0

AdventureWorks 데이터베이스를 다운로드하고 설치하지 않고도 같은 날에 둘 이상의 사람이 동일한 작업에 고용되는 경우가있을 것입니다. 그렇다면 distinct를 사용하는 것은 중복 된 결과가 아니기 때문에 정확합니다. 데이터를 여러 번 보는 데 관심이 없습니다. 또는 Employee 테이블에 기본 키의 이름을 제공 할 수있는 경우 가장 높은 기본 키 값으로 결정된 가장 최근의 직원을 얻는 다른 방법으로 코드를 편집 할 수 있습니다. –