Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Access VBA中插入表中缺少的值_Sql_Database_Ms Access_Vba - Fatal编程技术网

Sql 在Access VBA中插入表中缺少的值

Sql 在Access VBA中插入表中缺少的值,sql,database,ms-access,vba,Sql,Database,Ms Access,Vba,我有一个Access函数,可以将值表导出到Excel,格式如下 ID CurveShortName MarkRunID MarkDate ZeroCurveID MaturityDate ZeroRate DiscountFactor 15 CAD Sovereign 10091 7/2/2015 15-10091 7/2/2015 0.007499923 1 15 CAD Sovereign 10091 7/2/2015 15-10091

我有一个Access函数,可以将值表导出到Excel,格式如下

ID  CurveShortName  MarkRunID MarkDate ZeroCurveID MaturityDate ZeroRate    DiscountFactor
15  CAD Sovereign   10091   7/2/2015    15-10091    7/2/2015    0.007499923 1
15  CAD Sovereign   10091   7/2/2015    15-10091    7/3/2015    0.007499923 0.999979452
15  CAD Sovereign   10091   7/2/2015    15-10091    7/5/2015    0.00899634  0.999186963
15  CAD Sovereign   10091   7/2/2015    15-10091    7/6/2015    0.008993128 0.998473566
等等

到期日期列中缺少一些日期,例如7/4/2015,我想使用与同一标记日期(即7/2/2015)相关的所有值来插值该值

如何在Access中的值之间插值?我有一个用于Excel VBA的函数,但我很难将其转换为Access VBA。我在考虑从

Function CurveInterpolateRecordset(rsCurve As Recordset, InterpDate As Date) As Double

所以我可以直接使用给定的曲线和日期进行插值,但我无法让它工作

以下是识别缺失值的代码:

第2页下载的代码显示了如何查找丢失的日期:


有了这些,您可以使用线性插值来计算缺失的测量值。

这是一个简单的SQL解决方案。使用SQL server创建,但所有函数都应在ACCESS中找到

描述 我创建了一个简化版本的表,用于源代码创建插值 我创建了一个allDates表,您可以在其中存储所有可用的日期,这允许查找缺少的日期。有很多方法可以很容易地创建该表。 创建表范围如果范围大于1天,则计算范围,因为缺少日期。在这种情况下,保存起始值和变化率以进行插值。 完成后,我意识到这个查询也可以直接包含在select中,就像我创建min,max表一样。 将所有表连接在一起,结果是前3列,但我保留所有,以便您可以检查日期的来源。
您将如何识别丢失的日期?插值是指已知值的平均值还是其他什么?是的,插值我只是指零利率列中已知值的线性插值-因此,对于2015年7月4日,它将取2015年7月3日和2015年7月5日的平均值。我不知道如何识别丢失的日期;我正在考虑制作另一个列,包含完整的日期集作为参考,然后每当到期日期列与参考列不匹配时,它就可以进行插值。我的建议从简单开始,每次一个。嘿,谢谢你,我感谢你的帮助。你知道我将如何将这种功能移植到Access中吗?在SQL代码的大部分中使用strSQL函数似乎不起作用。什么是strSQL函数?我认为这应该在access中起作用,就像我说的,每次尝试构建一个查询。在您的解决方案中,ifi.MarkDate为NULL,r.MarkDate,I.MarkDate为MarkDate,a.MaturityDate,r.MarkDate和I.MarkDate之间的区别是什么?如果您检查fiddle演示,每行一个MarkDate为NULL,另一个不为NULL。一边是数据,另一边是插值数据。因此,如果一个为空,我使用另一个。
   SELECT 
       IIF(i.MarkDate IS NULL, r.MarkDate, i.MarkDate) as MarkDate,
       a.MaturityDate,
       IIF(
           i.ZeroRate IS NULL,
           r.startRate + DATEDIFF ( day , r.begindate, a.MaturityDate ) * rateChange,
           i.ZeroRate
          ) as ZeroRate, -- use values from r to interpolate rate
       i.*, r.*
   FROM  allDates a
   left Join Inter I
    on a.MaturityDate  = I.MaturityDate
   cross join
    (SELECT MIN(MaturityDate) minDate, MAX(MaturityDate) maxDate
     FROM Inter) as t
   left join rangesInter r
     on a.MaturityDate > r.[begindate]
    and a.MaturityDate < r.[enddate] 
   where a.MaturityDate >= t.minDate
     and a.MaturityDate <= t.maxDate;