【问题标题】:How do I window join across different dates in kdb如何在 kdb 中跨不同日期窗口加入
【发布时间】:2021-03-30 20:48:42
【问题描述】:

我是 kdb 的初学者。当我在 NYSE 的测试数据上练习窗口连接时,我遇到了不同日期的窗口连接问题。

基本上,我的桌子看起来像:

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)

但这并没有给我正确的结果。有人可以帮忙吗。谢谢!

【问题讨论】:

  • 你能显示你期望的输出吗?示例代码使用了表中没有的列。

标签: kdb


【解决方案1】:

要跨日期执行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

然后您可以像这样使用时间戳列:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    相关资源
    最近更新 更多