1

我正在尝试进行审计​​,将当天的实际汇率与当天应支付的历史汇率进行比较。

我创建了一个临时表来从历史中获取所需的信息,并将其称为 PPDAUDIT。这是审计 SQL

SELECT EMPLOYEE, PAY_SUM_GRP, HOURS, RATE, TR_DATE, DATE, CORRECT_RATE
FROM 
( 
SELECT  A.EMPLOYEE 
    , A.PAY_SUM_GRP
    , A.HOURS
    , A.RATE
    , A.TR_DATE
    , A.DATE 
    , CASE
        WHEN (MAX((B.BEG_DATE) < A.TR_DATE))
        AND B.FLD_NBR = '730'
        THEN B.N_VALUE/C.ANNUAL_HOURS
    END AS 'CORRECT_RATE'
FROM `PPDAUDIT` AS A 
    INNER JOIN `[dbo]_[hrhistory]`    AS B ON B.EMPLOYEE = A.EMPLOYEE
INNER JOIN `[dbo]_[employee]`     AS C ON C.EMPLOYEE = A.EMPLOYEE
WHERE A.RATE <> (B.N_VALUE/C.ANNUAL_HOURS) 
) AS D
WHERE CORRECT_RATE IS NOT NULL 

我期望得到的是当时较少但最接近交易日期的历史记录,然后只得到那些历史和过渡不匹配的记录。它拉的是第二接近的。

示例:如果交易发生在 2012 年 1 月 1 日,并且在 2011 年 12 月 31 日、2011 年 10 月 10 日和 2011 年 7 月 24 日有历史记录,则它会在 10 月 10 日而不是 12 日提取附加到历史记录的汇率/31 这是必需的。

4

1 回答 1

2

在 SQL Server 2008 中,您可以使用outer apply来搜索最新的历史记录。例如,这将搜索交易日期之前的最后一个汇率:

select  *
from    TransactionUnderInvestigation tui
outer apply
        (
        select  top 1 *
        from    RateHistory rh
        where   rh.EmployeeId = tui.EmployeeId
                and RateStartDate <= tui.TransactionDate
        order by
                RateStartDate desc
        ) hist
于 2012-06-12T19:38:54.833 回答