加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在SQL中插值的最佳方式

发布时间:2020-12-12 06:24:35 所属栏目:MsSql教程 来源:网络整理
导读:我有一个在一定日期的价格表: RatesId | 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 =(
我有一个在一定日期的价格表:
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读