kdb q - 计算 2 个日期之间的子表
kdb q - count subtable between 2 dates
我有一个table
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]
感谢您的帮助
我想你正在寻找这样的东西:
update count14:{c-0^(c:sums 1&x)y bin y-14}[i;date] by acc from t
这使用 sums
获取 运行 计数,bin
查找 14 天前的 运行 计数,然后索引回 运行 计数以获取该日期的计数。
过去和现在之间的差异是最近 14 天的计数。
注意此处的 lambda 允许我们轻松存储 sums
的结果并避免不必要的重新计算。
另一种方法是使用 window 连接 (wj1):
https://code.kx.com/q/ref/joins/#wj-wj1-window-join
dates:exec date from t;
d:(dates-7;dates-1);
wj1[d;`acc`date;t;(`acc`date xasc t;(count;`i))]
我有一个table
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]
感谢您的帮助
我想你正在寻找这样的东西:
update count14:{c-0^(c:sums 1&x)y bin y-14}[i;date] by acc from t
这使用 sums
获取 运行 计数,bin
查找 14 天前的 运行 计数,然后索引回 运行 计数以获取该日期的计数。
过去和现在之间的差异是最近 14 天的计数。
注意此处的 lambda 允许我们轻松存储 sums
的结果并避免不必要的重新计算。
另一种方法是使用 window 连接 (wj1): https://code.kx.com/q/ref/joins/#wj-wj1-window-join
dates:exec date from t;
d:(dates-7;dates-1);
wj1[d;`acc`date;t;(`acc`date xasc t;(count;`i))]