根据最近的最新日期,匹配2个表之间的值的最有效方法是什么?

nwl*_*wly 6 sql t-sql sql-server date

我在MS SQL Server中有两个表:

dailyt - 包含每日数据:

date             val
---------------------
2014-05-22       10
2014-05-21       9.5
2014-05-20       9
2014-05-19       8
2014-05-18       7.5
etc...
Run Code Online (Sandbox Code Playgroud)

并且periodt- 包含不定期的数据:

date             val
---------------------
2014-05-21       2
2014-05-18       1
Run Code Online (Sandbox Code Playgroud)

给定一行dailyt,我想通过添加相应的值来调整其值,periodt最接近的日期先于或等于dailyt行的日期.所以,输出看起来像:

addt

date             val
---------------------
2014-05-22       12      <- add 2 from 2014-05-21
2014-05-21       11.5    <- add 2 from 2014-05-21
2014-05-20       10      <- add 1 from 2014-05-18
2014-05-19       9       <- add 1 from 2014-05-18
2014-05-18       8.5     <- add 1 from 2014-05-18
Run Code Online (Sandbox Code Playgroud)

我知道这样做的一种方法是连接dailytperiodt表格periodt.date <= dailyt.date然后强加一个ROW_NUMBER() (PARTITION BY dailyt.date ORDER BY periodt.date DESC)条件,然后WHERE在行号上加上条件= 1.

还有另一种方法可以提高效率吗?或者这是非常优化的?

Gar*_*thD 4

我认为使用APPLY将是最有效的方法:

SELECT  d.Val,
        p.Val,
        NewVal = d.Val + ISNULL(p.Val, 0)
FROM    Dailyt AS d
        OUTER APPLY
        (   SELECT  TOP 1 Val
            FROM    Periodt p
            WHERE   p.Date <= d.Date
            ORDER BY p.Date DESC
        ) AS p;
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle 示例