sql - 查找工资率的最新日期
问题描述
也有人提出了类似的问题,但我仍然希望得到一些澄清。我一直在 SQL 上使用 AdventureWorks2017 包,我打算得到 290 行作为我的答案。然而,使用下面的代码,我一直在努力实现这一目标,但我的成功率很低。
SELECT a.[NationalIDNumber], a.[Gender], b.[Rate], b.RateChangeDate, b.[PayFrequency], a.[BusinessEntityID], b.[ModifiedDate]
FROM [AdventureWorks2017].[HumanResources].[Employee] a
INNER JOIN [AdventureWorks2017].[HumanResources].[EmployeePayHistory] b ON a.[BusinessEntityID] = b.[BusinessEntityID]
AND b.RateChangeDate = MAX(b.RateChangeDate)
ORDER BY BusinessEntityID
我的目标本质上是这样的:我想找到员工的最新工资率。我尝试了一些不同类型的查询来获得我想要的答案,但通常我得到 277 或 316 行(当我应该得到 290 时)。我尝试找到RateChangeDate的最大值和Rate的最大值,但没有成功。我要修改的主线是以“AND”开头的主线。任何帮助都会很棒!
这里还有一个 AdventureWorks2008 的模式(虽然它不是 2017 年),以防需要一些明确性。
解决方案
您可以对 EmployeePayHistory 表进行分区,按日期降序排列,然后选择最近的作为内部联接的一部分。
SELECT a.[NationalIDNumber], a.[Gender], b.[Rate], b.[RateChangeDate], b.[PayFrequency], a.[BusinessEntityID], b.[ModifiedDate]
FROM [AdventureWorks2017].[HumanResources].[Employee] a
INNER JOIN (Select ROW_NUMBER() OVER (PARTITION BY eph.[BusinessEntityID] ORDER BY eph.[RateChangeDate] DESC) AS 'PayOrderDesc'
, eph.*
FROM [AdventureWorks2017].[HumanResources].[EmployeePayHistory] eph) b
ON a.[BusinessEntityID] = b.[BusinessEntityID]
and b.PayOrderDesc = 1
ORDER BY BusinessEntityID
推荐阅读
- python - 使用默认样式时,无法访问 MS-Word 文件中样式的属性,使用 python-docx
- android - Android - Recyclerview 内的 VideoView 匹配父宽度并保持纵横比
- android - 加载 InterstitialAd 时 Flutter App 崩溃
- math - 函数的意外乘法结果
- reactjs - isAdmin 在我的 react/redux 应用程序中不起作用
- javascript - Pass data from one $lookup to another
- django - 请帮我定制我的 django 管理面板
- sql - SELECT 子句中忽略的转义单引号
- pytorch - pytorch 修改输入数据以转发以使其适合我的模型
- neural-network - MNIST 上的二元分类:损失和准确率保持不变