比较最接近交易日期的历史记录

时间:2012-06-12 18:26:46

标签: mysql sql sql-server-2008 history audit

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

我创建了一个临时表来获取历史记录所需的信息并调用此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日,10/10/2011和2011年7月24日有历史记录,则会在10/10上提取附加到历史记录的费率比需要的12/31。

1 个答案:

答案 0 :(得分: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