Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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
kdb-如何以动态/快速的方式增加缺少日期的表_Kdb - Fatal编程技术网

kdb-如何以动态/快速的方式增加缺少日期的表

kdb-如何以动态/快速的方式增加缺少日期的表,kdb,Kdb,我有一个内存中的表,其中(date、sym、symType、factor、weight)列 在某些情况下,此内存中表一旦查询到特定的日期范围,就会丢失整个日期。可能是今天的数据,或者如果我们查询多个日期,可能是中间的一天,或者可能是多天,或者是最后的日期,或者是开始。 我怎样才能提出一个查询,用截至该点的最大日期来填充那些缺失的日期 因此,如果我们有以下数据: 示例: .z.D .z.D-2 .z.D-3 .z.D-6 .z.D-7 我希望桌子看起来像这样: .z.D -> .z.D

我有一个内存中的表,其中(date、sym、symType、factor、weight)列

在某些情况下,此内存中表一旦查询到特定的日期范围,就会丢失整个日期。可能是今天的数据,或者如果我们查询多个日期,可能是中间的一天,或者可能是多天,或者是最后的日期,或者是开始。 我怎样才能提出一个查询,用截至该点的最大日期来填充那些缺失的日期

因此,如果我们有以下数据: 示例:

.z.D 
.z.D-2
.z.D-3
.z.D-6
.z.D-7
我希望桌子看起来像这样:

.z.D -> .z.D
.z.D-1 -> copy of .z.D-2
.z.D-2 -> .z.D-2
.z.D-3 -> .z.D-3
.z.D-4 -> copy of .z.D-6
.z.D-5 -> copy .z.d-6
.z.D-6 -> .z.D-6
.z.D-7 -> .z.D-7
如果查询中缺少“今天”,请使用上一个可用日期作为“今天”。 如果在您的查询中,最后一天是昨天,但它丢失了,请使用前一个可用的日期作为昨天,依此类推。 如果缺少上一个(最小日期),请使用下一个可用日期

我可以通过识别丢失的日期并逐日检查丢失的日期来手动完成这项工作,但我想知道是否有更好的方法来完成这项工作


AJ可以通过构建([]日期:ListFoDeDeReDISTHORM)交叉([S]:ListFoSyMS)交叉([SARS:SytType)],然后用表来处理AJ,但是它不能解决所有的情况。例如,如果丢失的一天是在今天或在开始的时候。

< P>快速猜测,但是在结果上使用XGROUP的STEP函数似乎会起作用。
res:getFromTab[dates];
f:{`date xcols:update date:x from y@x};
xgrp:`s#`date xasc `date xgroup res;
raze f[;xgrp] each dates

性能可能会很糟糕…

你能想出一个重复的例子来解释为什么
aj
不起作用吗?正常使用aj应能解决此问题:

t1:([]date:.z.D-til 8;sym:`ABC);
t2:`date xasc([]date:.z.D-0 2 3 6 7;sym:`ABC;data:"I"$ssr[;".";""]each string .z.D-0 2 3 6 7);

q)aj[`sym`date;t1;t2]
date       sym data
-----------------------
2020.07.20 ABC 20200720
2020.07.19 ABC 20200718
2020.07.18 ABC 20200718
2020.07.17 ABC 20200717
2020.07.16 ABC 20200714
2020.07.15 ABC 20200714
2020.07.14 ABC 20200714
2020.07.13 ABC 20200713

/If you need your last date to fill "upwards" then use fills:

update fills data by sym from aj[`sym`date;([]date:.z.D-til 9;sym:`ABC);t2]

看起来这是工作的预期-不知道为什么我认为它没有。谢谢你@terrylynch