当前位置: 首页 > 面试题库 >

在SQL中插值的最佳方法

奚瑾瑜
2023-03-14
问题内容

我有一个特定日期的汇率表:

          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:

Date        Rate
----------  -----
01/01/2011  4.5
01/04/2011  3.2
04/06/2011  2.4
17/06/2011  
30/06/2011  5.0

线性插值是 (5 + 2,4) / 2 = 3,7

有没有一种方法可以执行简单的查询(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, prev.Date, 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


 类似资料:
  • 问题内容: 我正在寻找一种SQL注入安全技术,以便通过PHP和MySQLi一次插入很多行(大约2000年)。 我有一个必须包含所有值的数组。目前,我正在这样做: 我尝试了call_user_func_array(),但是它引起了stackoverflow。 什么是更快的方法(例如一次将它们全部插入?),但是仍然可以防止SQL注入(如准备好的语句)和stackoverflows呢? 谢谢! 问题答案

  • 我正在寻找一种SQL注入安全技术,可以用PHP和Mysqli同时插入大量行(约2000)。 我有一个数组,其中包含所有必须包含的值。目前我正在这样做: 我尝试了call_user_func_array(),但它导致了堆栈溢出。 有什么更快的方法可以做到这一点(比如一次插入它们?),但仍然可以防止SQL注入(比如准备好的语句)和StackOverflows? 谢谢!

  • 问题内容: 在调用对象的函数之前,我需要检查对象是否为null,以避免引发。 最好的方法是什么?我考虑过这些方法。 哪一种是Java最佳编程实践? 问题答案: 方法4是最好的。 将使用短路评估,这意味着如果a的第一个条件为假,则评估结束。

  • 问题内容: 我的表(a,b,c,d)中有四列,它们全都依赖于列(日期),所以在查询中我有: 我需要知道为所有索引创建索引的最佳方法是什么,我有两个建议: 第一个建议: 第二个建议: 请使用哪个更好。 问题答案: 这可能对您有帮助: 要索引的列应该是用于过滤的列(子句)。您可以添加以避免查询。

  • 我试图找出在Spark dataframe列中获得最大值的最佳方法。 考虑以下示例: 上面的每一个都给出了正确的答案,但在没有Spark分析工具的情况下,我无法判断哪一个是最好的。 就Spark运行时或资源使用而言,上述哪种方法最有效,或者是否有比上述方法更直接的方法,有任何来自直觉或经验主义的想法?

  • 问题内容: 在表A中插入信息并使用表A中的索引与表B相关的最佳方法是什么? 我尝试的“解决方案”是将信息插入表A(具有自动生成的ID),然后选择最后一个索引并将其插入表B。这可能不是很有用,因为最后一个索引可能会在表A和表B之间变化。插入是因为另一个用户可以在表A中生成新索引 我在各种DBMS postgreSQL,Informix,MySQL和MSSQL中遇到了这个问题(感谢lomaxx的回答)