我正在尝试执行审核,将当天的实际费率与当天应支付的历史费率进行比较。
我创建了一个临时表来获取历史记录所需的信息并调用此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。
答案 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