首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个日期之间的kdb Q- count子表

两个日期之间的kdb Q- count子表
EN

Stack Overflow用户
提问于 2018-08-24 20:39:27
回答 2查看 585关注 0票数 1

我有一张桌子

代码语言:javascript
复制
t:`date xasc ([]date:100?2018.01.01+til 100;price:100?til 100;acc:100?`a`b)

并希望在t中有一个新的列,其中包含t中的条目计数,其中date在前14天的日期范围内,并且帐户与acc中的相同。例如,如果有一行

代码语言:javascript
复制
date       price    acc prevdate    prevdate1W   countprev14
2018.01.10  37       a  2018.01.09  2018.01.03   ?

countprev14应包含2018.01.032018.01.09之间的观察值数量,其中acc=a

我目前使用的方法可能还可以改进:

代码语言:javascript
复制
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]

谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-24 21:15:54

另一种方法是使用窗口连接(wj1):https://code.kx.com/q/ref/joins/#wj-wj1-window-join

代码语言:javascript
复制
dates:exec date from t; 
d:(dates-7;dates-1);
wj1[d;`acc`date;t;(`acc`date xasc t;(count;`i))]
票数 5
EN

Stack Overflow用户

发布于 2018-08-24 21:06:31

我想你要找的东西是这样的:

update count14:{c-0^(c:sums 1&x)y bin y-14}[i;date] by acc from t

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

当时和现在之间的差额是最近14天的差额。

注这里的lambda允许我们轻松地存储来自sums的结果,并避免不必要的重新计算。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52004721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档