Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/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
kdb q-两个日期之间的计数子表_Kdb - Fatal编程技术网

kdb q-两个日期之间的计数子表

kdb q-两个日期之间的计数子表,kdb,Kdb,我有一张桌子 t:`date xasc ([]date:100?2018.01.01+til 100;price:100?til 100;acc:100?`a`b) 并且希望在t中有一个新列,其中包含t中的条目计数,date在前14天的日期范围内,并且账户与acc中的账户相同。例如,如果有一行 date price acc prevdate prevdate1W countprev14 2018.01.10 37 a 2018.01.09 2018

我有一张桌子

t:`date xasc ([]date:100?2018.01.01+til 100;price:100?til 100;acc:100?`a`b)
并且希望在
t
中有一个新列,其中包含
t
中的条目计数,
date
在前14天的日期范围内,并且账户与
acc
中的账户相同。例如,如果有一行

date       price    acc prevdate    prevdate1W   countprev14
2018.01.10  37       a  2018.01.09  2018.01.03   ?
然后
countprev14
应包含
2018.01.03
2018.01.09
之间的观察次数,其中
acc=a

我目前的做法可能会有所改进:

f:{[dates;ac;t]count select from t where date>=(dates 0),date<=(dates 1),acc=ac}[;;t]
(f')[(exec date-7 from t),'(exec date-1 from t);exec acc from t]

f:{[dates;ac;t]count从t中选择date>=(dates 0),date我想您正在寻找这样的东西:

acc从t开始更新count14:{c-0^(c:summe1&x)y bin y-14}[i;date]

这使用
sums
获取运行计数,
bin
查找14天前的运行计数,然后索引回运行计数列表以获取该日期的计数

当时和现在的计数之差是最近14天的数字


请注意,此处的lambda允许我们轻松存储
总和的结果,并避免不必要的重新计算。

我想您正在寻找这样的结果:

acc从t开始更新count14:{c-0^(c:summe1&x)y bin y-14}[i;date]

这使用
sums
获取运行计数,
bin
查找14天前的运行计数,然后索引回运行计数列表以获取该日期的计数

当时和现在的计数之差是最近14天的数字


注意:此处的lambda允许我们轻松存储
总和的结果,并避免不必要的重新计算。

另一种方法是使用窗口联接(wj1):


另一种方法是使用窗口连接(wj1):

dates:exec date from t; 
d:(dates-7;dates-1);
wj1[d;`acc`date;t;(`acc`date xasc t;(count;`i))]