我正在使用Adventure Works数据库练习SQL。我的任务很简单。我想找一个员工,看看他们赚多少钱。
名字|姓氏|年龄|支付率|
问题是,工资率位于表中,该表与ModifiedDate列与雇员(EmployeePayHistory)的一对多关系。我想获取最新的ModifiedDate,但没有尝试过的方法。我一直在子查询中追赶聚合函数
SELECT e.BusinessEntityID,p.FirstName [First Name], p.LastName [Last Name], DATEDIFF(YEAR,e.BirthDate, GETDATE() )[Age],
(SELECT eph1.Rate FROM HumanResources.EmployeePayHistory eph1 HAVING eph1.Rate = MAX(eph.ModifiedDate))
FROM Person.Person p
JOIN HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID
JOIN HumanResources.EmployeePayHistory eph ON e.BusinessEntityID = eph.BusinessEntityID
GROUP BY e.BusinessEntityID, p.FirstName,p.LastName, DATEDIFF(YEAR,e.BirthDate, GETDATE() )
这是每组最大的问题。不要认为聚合:请考虑过滤。
我想这就是您想要的:
SELECT
e.BusinessEntityID
p.FirstName [First Name],
p.LastName [Last Name],
DATEDIFF(YEAR,e.BirthDate, GETDATE()) [Age],
(
SELECT TOP (1) eph.Rate
FROM HumanResources.EmployeePayHistory eph
WHERE eph.BusinessEntityID = p.BusinessEntityID
ORDER BY eph.ModifiedDate DESC
) [LatestRate]
FROM Person.Person p
JOIN HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID
注意:您没有确切说明Person
和Employee
之间的关系-上面假设这是1-1关系。