【问题标题】:1 to many Select query with aggregate function (Adventure Works database)具有聚合函数的 1 对多 Select 查询(Adventure Works 数据库)
【发布时间】:2020-07-23 04:40:19
【问题描述】:

我正在使用 Adventure Works 数据库练习我的 SQL。 我的任务很简单。我想查找一名员工,看看他们赚了多少钱。

名字|姓氏|年龄|工资率|

问题是工资率位于与员工 (EmployeePayHistory) 具有一对多关系的表中,列 ModifiedDate。我想获取最新的 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() )

【问题讨论】:

    标签: sql sql-server tsql greatest-n-per-group adventureworks


    【解决方案1】:

    这是每组最大 n 个问题。不要考虑聚合:考虑过滤。

    我想这就是你想要的:

    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
    

    注意:您没有确切说明PersonEmployee 之间的关系——以上假设这是一对一的关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      相关资源
      最近更新 更多