查找支付率的最新日期

Finding the Latest Date for the Pay Rate

有人提出了类似的问题,但我还是想澄清一下。我一直在 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 时)。我已经尝试找到 RateChangeDatemaxRate[ 的 max =26=],但没有成功。我要修改的主线是以'AND'开头的那一行。任何帮助都会很棒!

这里还有一个 AdventureWorks2008 的架构(尽管它不是 2017 年),以防需要澄清。

AdventureWorks 2008 Schema (not 2017 - the one I am using)

您可以对 EmployeePayHistory table 进行分区,按日期降序排序,然后 select 最近的作为内部联接的一部分。

    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