KDB/Q 准时滑行 window
Sliding window on time in KDB/Q
Q/KDB 中有一些函数可以让我们在滑动 window 上聚合(msum、mavg 等)。但是这些函数考虑了前面的行数。
我想要一个函数,它可以在滑动 window 上聚合,但使用时间而不是行数。例如最后 5 分钟。
有这样的功能吗?如果没有,我该如何设计呢?我不想使用 while 循环,因为它会因为数据量太大而减慢我的程序速度。
感谢您的帮助
你想聚合到固定时间段吗by
和xbar
是你的朋友:http://code.kx.com/q/ref/arith-integer/#xbar
trade: ([] time:`time$(10:00 10:01 10:03 10:07 10:09); price:`float$(12.1 12.6 12.4 12.4 12.9); size:`int$(5 6 10 34 2))
select last price, sum size by 5 xbar time.minute from trade
minute| price size
------| ----------
10:00 | 12.4 21
10:05 | 12.9 36
如果你想为每一行返回 5 分钟的时间,你正在寻找一个 window 连接:http://code.kx.com/q/ref/joins/#wj-wj1-window-join
w:-300000 0+\:trade.time
wj1[w;`time;trade;(trade;(last;`price);(sum;`size))]
time price size
-----------------------
10:00:00.000 12.1 5
10:01:00.000 12.6 11
10:03:00.000 12.4 21
10:07:00.000 12.4 44
10:09:00.000 12.9 36
Q/KDB 中有一些函数可以让我们在滑动 window 上聚合(msum、mavg 等)。但是这些函数考虑了前面的行数。
我想要一个函数,它可以在滑动 window 上聚合,但使用时间而不是行数。例如最后 5 分钟。
有这样的功能吗?如果没有,我该如何设计呢?我不想使用 while 循环,因为它会因为数据量太大而减慢我的程序速度。
感谢您的帮助
你想聚合到固定时间段吗by
和xbar
是你的朋友:http://code.kx.com/q/ref/arith-integer/#xbar
trade: ([] time:`time$(10:00 10:01 10:03 10:07 10:09); price:`float$(12.1 12.6 12.4 12.4 12.9); size:`int$(5 6 10 34 2))
select last price, sum size by 5 xbar time.minute from trade
minute| price size
------| ----------
10:00 | 12.4 21
10:05 | 12.9 36
如果你想为每一行返回 5 分钟的时间,你正在寻找一个 window 连接:http://code.kx.com/q/ref/joins/#wj-wj1-window-join
w:-300000 0+\:trade.time
wj1[w;`time;trade;(trade;(last;`price);(sum;`size))]
time price size
-----------------------
10:00:00.000 12.1 5
10:01:00.000 12.6 11
10:03:00.000 12.4 21
10:07:00.000 12.4 44
10:09:00.000 12.9 36