我在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...
并且periodt
-包含不定期输入的数据:
date val
---------------------
2014-05-21 2
2014-05-18 1
给定中的某行dailyt
,我想通过添加periodt
与该行日期之前或之后的最接近日期的相应值in来调整其值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
我知道实现此目的的一种方法是将dailyt
和periodt
表periodt.date <= dailyt.date
联接在一起,然后施加ROW_NUMBER() (PARTITION BY dailyt.date ORDER BY periodt.date DESC)
条件,然后WHERE
将行号上的条件设置为= 1。
还有另一种方法可以更有效地做到这一点吗?或者这是最佳选择?
我认为使用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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句