sql - 具有聚合函数的 1 对多 Select 查询(Adventure Works 数据库)
问题描述
我正在使用 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() )
解决方案
这是每组最大 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
Person
注意:您没有确切说明和之间的关系Employee
- 上面假设这是一个 1-1 关系。
推荐阅读
- excel - 在 Excel 中,如何从具有值的日期列表中创建一个具有唯一值的开始日期和结束日期的表?
- javascript - 在 localhost 服务器中播放嵌入式 youtube 视频的 HTML 显示视频不可用
- octave - 八度错误:fun(0):下标必须是整数 1 到 (2^63)-1 或逻辑
- stream - 什么是`where .force`?
- python - 我应该如何对 MySQL 查询进行单元测试?
- python - How to use Selenium Chromdriver on Android
- mariadb - Meaning of percentage in rows section in explain output of mariadb 10.5
- python - 为 jupyter 笔记本启用 splitcell/splitcell 扩展时出错
- java - JDK 14.0.1 installed and "No Java runtime present, requesting install"
- javascript - Buggy and Jittery overflow: scroll container if animating font-variation-settings inside it