Tsql AdventureWorks2014-根据职位创建最新员工的摘要
我想知道是否有人能帮忙 我正在尝试编写一些代码,使用Adventureworks2012数据库返回基于Jobtitle的最新员工列表 到目前为止,我有以下几点: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
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表中提供主键的名称,我可以编辑我的代码,使用另一种方法,您可以通过最高主键值确定最近的员工。