Tsql AdventureWorks2014-根据职位创建最新员工的摘要

Tsql AdventureWorks2014-根据职位创建最新员工的摘要,tsql,join,adventureworks,derived-table,Tsql,Join,Adventureworks,Derived Table,我想知道是否有人能帮忙 我正在尝试编写一些代码,使用Adventureworks2012数据库返回基于Jobtitle的最新员工列表 到目前为止,我有以下几点: SELECT DISTINCT HREDH.BusinessEntityID, HRE.JobTitle, hre.HireDate FROM [HumanResources].[EmployeeDepartmentHistory] HREDH INNER JOIN HumanResources.Employee

我想知道是否有人能帮忙

我正在尝试编写一些代码,使用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,因此,如果您能从大量的知识库中获得帮助,我将不胜感激


谢谢,

这将返回两个表联接的所有行,其中职务的雇用日期等于该职务的最高日期

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

你为什么这么肯定?谢谢你,安东尼!这似乎完成了大部分工作,但在执行查询时仍会返回重复的记录。这就是为什么我必须在查询中使用DISTINCT语句的原因。您知道删除重复项的另一种方法吗?如果不下载和安装AdventureWorks数据库,我的猜测是,在某些情况下,同一天有多人被雇用从事同一工作。如果是这种情况,那么使用distinct是正确的,因为这些不是重复的返回,您只是对多次查看数据不感兴趣。或者,如果您可以在Employee表中提供主键的名称,我可以编辑我的代码,使用另一种方法,您可以通过最高主键值确定最近的员工。