2017-04-05 44 views
0

我想知道是否有人可以提供幫助。AdventureWorks2014 - 根據職位標題創建最新的員工摘錄

我想寫一些代碼,返回使用Adventureworks2012數據庫的基於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數據庫,我的猜測是在同一天有多個人被僱用同一份工作。如果是這樣,那麼使用不同的是正確的,因爲這些不是重複的返回,你只是不感興趣多次看到數據。或者,如果您可以在Employee表上提供主鍵的名稱,我可以編輯我的代碼,以獲取以最高主鍵值確定的最近僱員的其他方式。 –

相關問題