Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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中跨不同日期进行窗口连接_Kdb_Q - Fatal编程技术网

如何在kdb中跨不同日期进行窗口连接

如何在kdb中跨不同日期进行窗口连接,kdb,q,Kdb,Q,我是kdb的初学者。当我在纽约证券交易所的测试数据上练习窗口连接时,我遇到了不同日期的窗口连接问题。 基本上,我的桌子看起来像: t:([] sym:10#`AAPL;date:2021.03.21 2021.03.21 2021.03.21 2021.03.21 2021.03.21 2021.03.22 2021.03.22 2021.03.22 2021.03.22 2021.03.22;price:100 101 105 110 120 130 140 150 160 170;time:

我是kdb的初学者。当我在纽约证券交易所的测试数据上练习窗口连接时,我遇到了不同日期的窗口连接问题。 基本上,我的桌子看起来像:

t:([] sym:10#`AAPL;date:2021.03.21 2021.03.21 2021.03.21 2021.03.21 2021.03.21 2021.03.22 2021.03.22 2021.03.22 2021.03.22 2021.03.22;price:100 101 105 110 120 130 140 150 160 170;time:10:01 10:04 10:07 10:10 10:13 10:01 10:04 10:07 10:10 10:13)
我试图在每个日期每3分钟创建一个滑动窗口,并计算该窗口中的价格总和。但是,我不知道如何在不同的组上进行窗口连接

我试过:

w3:-3  0+\:t[`minute];
newdata: wj1[w3;`minute;t;(t;(sum;`price)

但这并没有给我正确的结果。有人能帮忙吗。谢谢大家!

要跨日期执行
wj
,您需要一个时间戳列,您可以从日期和时间创建该列:

t:update timeStamp:"P"$"D" sv/: flip string (date;time) from t
t
sym  date       price time  timeStamp
---------------------------------------------------------
AAPL 2021.03.21 100   10:01 2021.03.21D10:01:00.000000000
AAPL 2021.03.21 101   10:04 2021.03.21D10:04:00.000000000
AAPL 2021.03.21 105   10:07 2021.03.21D10:07:00.000000000
AAPL 2021.03.21 110   10:10 2021.03.21D10:10:00.000000000
AAPL 2021.03.21 120   10:13 2021.03.21D10:13:00.000000000
然后,您可以使用timeStamp列,如下所示:

w3:-00:03 00:00 +\:t[`timeStamp]

wj1[w3;`timeStamp;t;(t;(sum;`price))]
sym  date       price time  timeStamp
---------------------------------------------------------
AAPL 2021.03.21 100   10:01 2021.03.21D10:01:00.000000000
AAPL 2021.03.21 201   10:04 2021.03.21D10:04:00.000000000
AAPL 2021.03.21 206   10:07 2021.03.21D10:07:00.000000000
AAPL 2021.03.21 215   10:10 2021.03.21D10:10:00.000000000
AAPL 2021.03.21 230   10:13 2021.03.21D10:13:00.000000000
AAPL 2021.03.22 130   10:01 2021.03.22D10:01:00.000000000
AAPL 2021.03.22 270   10:04 2021.03.22D10:04:00.000000000
AAPL 2021.03.22 290   10:07 2021.03.22D10:07:00.000000000
AAPL 2021.03.22 310   10:10 2021.03.22D10:10:00.000000000
AAPL 2021.03.22 330   10:13 2021.03.22D10:13:00.000000000
如果表中有超过1个sym,则应应用parted属性:

t:update `p#sym from `sym`timeStamp xasc t
然后在wj的第二个参数中的timeStamp之前添加sym:

q)wj[w3;`sym`timeStamp;select sym, timeStamp from t;(t;(sum;`price))]
sym  timeStamp                     price
----------------------------------------
AAPL 2021.03.21D10:01:00.000000000 100
AAPL 2021.03.21D10:04:00.000000000 201
AAPL 2021.03.21D10:07:00.000000000 206
AAPL 2021.03.21D10:10:00.000000000 215
AAPL 2021.03.21D10:13:00.000000000 230
AAPL 2021.03.22D10:01:00.000000000 250
AAPL 2021.03.22D10:04:00.000000000 270
AAPL 2021.03.22D10:07:00.000000000 290
AAPL 2021.03.22D10:10:00.000000000 310
AAPL 2021.03.22D10:13:00.000000000 330
MSFT 2021.03.21D10:01:00.000000000 468
MSFT 2021.03.21D10:04:00.000000000 915
MSFT 2021.03.21D10:07:00.000000000 668
MSFT 2021.03.21D10:10:00.000000000 403
MSFT 2021.03.21D10:13:00.000000000 604
MSFT 2021.03.22D10:01:00.000000000 775
MSFT 2021.03.22D10:04:00.000000000 697
MSFT 2021.03.22D10:07:00.000000000 829
MSFT 2021.03.22D10:10:00.000000000 799
MSFT 2021.03.22D10:13:00.000000000 382

你能展示你期望的输出吗?示例代码使用的列不在表中。