代码之家  ›  专栏  ›  技术社区  ›  tenticon

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

kdb
  •  1
  • tenticon  · 技术社区  · 7 年前

    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]
    

    谢谢你的帮助

    2 回复  |  直到 7 年前
        1
  •  5
  •   jomahony    7 年前

    另一种方法是使用窗口连接(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))]
    
        2
  •  5
  •   Ryan McCarron    7 年前

    我想你在找这样的东西:

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

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

    注意这里的lambda允许我们存储 总和 容易避免不必要的重新计算。

    推荐文章