在SQL中插值的最佳方式

我有一个在一定日期的价格表:
Rates

Id  |     Date      |  Rate
----+---------------+-------
 1  |   01/01/2011  |  4.5
 2  |   01/04/2011  |  3.2
 3  |   04/06/2011  |  2.4
 4  |   30/06/2011  |  5

我想通过简单的线性插值来获得输出速率.

所以如果我进入17/06/2011,线性插值是3,7 =(5 2,4)/ 2

有没有办法做一个简单的查询(sql Server 2005),或者这种东西需要以编程方式完成(C#…)?

解决方法

这样的东西(更正):
SELECT CASE WHEN next.Date IS NULL  THEN prev.Rate
            WHEN prev.Date IS NULL  THEN next.Rate
            WHEN next.Date = prev.Date  THEN prev.Rate
              ELSE ( DATEDIFF(d,prev.Date,@InputDate) * next.Rate 
                   + DATEDIFF(d,@InputDate,next.Date) * prev.Rate
                   ) / DATEDIFF(d,next.Date)
       END AS interpolationRate 
FROM
  ( SELECT TOP 1 
        Date,Rate 
    FROM Rates
    WHERE Date <= @InputDate
    ORDER BY Date DESC
  ) AS prev
  CROSS JOIN
  ( SELECT TOP 1 
        Date,Rate 
    FROM Rates
    WHERE Date >= @InputDate
    ORDER BY Date ASC
  ) AS next

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...