mysql - 比较最接近交易日期的有效历史记录

标签 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 日、2011 年 10 月 10 日和 2011 年 10 月 10 日和 2011 年 7 月 24 日都有历史记录,那么它会提取 10 月 10 日附加到历史记录的汇率,而不是比所需的 12/31。

最佳答案

在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

关于mysql - 比较最接近交易日期的有效历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11002576/

相关文章:

MySQL:更新所有同名变量

java - native 查询参数在 Java EE 中不起作用

sql - 在 INSERT 时获取标识列值

sql - 如何比较 SQL Server 中的两列

php - MySQL SELECT 女性而非男性

javascript - 从外部 json 代码将数据添加到 amcharts 图表

sql - 具有像 where 0=0 这样的条件的确切含义是什么?

sql - 调试 PostgreSQL sql 查询

c# - 使用 TableAdapters 将小数从 C# 错误地传递到 SQL Server

mysql - Toad 没有连接到 mysql 远程服务器