我在 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...
And periodt
- 其中包含不定期传入的数据:
date val
---------------------
2014-05-21 2
2014-05-18 1
给定一行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
我知道做到这一点的一种方法是加入dailyt
and periodt
桌子上periodt.date <= dailyt.date
然后施加一个ROW_NUMBER() (PARTITION BY dailyt.date ORDER BY periodt.date DESC)
条件,然后有一个WHERE
行号 to = 1 的条件。
有没有另一种方法可以更有效地做到这一点?或者这已经是最佳选择了?
我认为使用APPLY http://technet.microsoft.com/en-us/library/ms175156%28v=sql.105%29.aspx将是最有效的方法:
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;
SQL Fiddle 示例 http://sqlfiddle.com/#!3/4f1d6/1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)