2012-06-12 102 views
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月和2011年7月24日有歷史記錄,則會在10/10而不是需要的12/31。

+1

您使用的是哪個數據庫? (SqlServer/MySQL/Oracle/...) – Andomar

+0

我正在使用MSSQL – Lacey

+0

和哪個版本? (.../2005/2008/2012) – Andomar

回答

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