その日の実際の RATE と、その日に支払われるべきであった過去の RATE を比較する監査を実行しようとしています。
履歴から必要な情報を取得するために一時テーブルを作成し、これを 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
私が期待していたのは、それよりも前の履歴レコードでしたが、トランザクションの日付に最も近いものであり、履歴と移行が一致しなかったものだけを取得しました。それが引いたのは2番目に近いものでした。
例: トランザクションが 2012 年 1 月 1 日に発生し、2011 年 12 月 31 日、2011 年 10 月 10 日、および 2011 年 7 月 24 日の履歴がある場合、12 ではなく 10/10 の履歴に関連付けられたレートがプルされます。 /31 が必要です。