我是kdb q的新手。我正在尝试将 kdb 日期时间四舍五入到最接近的偶数秒。
例如,对于下表:
tp_time price synp
------------------------
05:00:03 1697.15 1697.15
05:00:05 1697.15 1697.15
...
我预期的表格如下:
tp_time price synp
------------------------
05:00:02 1697.15 1697.15
05:00:04 1697.15 1697.15
...
有人可以给我一些关于这个问题的提示吗? 非常感谢!
与Jonathons 相关的一点,如果您的时间戳类型为"timespan"(又名类型 16h(,那么您可以将"2"指定为 0D00:00:02,如下所示
q)0D00:00:02 xbar 0D05:00:03 0D05:00:04 0D05:00:05 0D05:00:06
0D05:00:02.000000000 0D05:00:04.000000000 0D05:00:04.000000000 0D05:00:06.000000
000
这可以使代码更易于理解,尤其是在您开始进入存储桶的不同粒度级别时。
注意 - 您可以在 xbar 函数中看到类型 16 的内置处理
q)xbar
k){x*y div x:$[16h=abs[@x];"j"$x;x]}
在时间跨度之外,您还可以通过将时间段转换为 long 来更轻松地读取其他数据类型
q)("j"$00:02) xbar 05:00:02 05:00:03 05:00:04
05:00:02 05:00:02 05:00:04
你可以用xbar
来做到这一点
q)2 xbar 05:00:03 05:00:05
05:00:02 05:00:04
所以在你的情况下,它会像update 2 xbar tp_time from t
所问问题中的tp_time
类型是second
(v
(,因此2 xbar tp_time
可以很好地工作;但是,如果tp_time
是time
(t
(或timespan
(n
(的类型,则无论数据类型如何,以下内容都将生成正确的结果。
q)t:([] tp_time:05:00:03.123 05:00:05.345 ; price:1697.15 1697.15; synp:1697.15 1697.15) //check out the meta of the table
q)update tp_time:2 xbar tp_time.second from t //usinng tp_time.second
tp_time price synp
------------------------
05:00:02 1697.15 1697.15
05:00:04 1697.15 1697.15
在这里,我们访问tp_time
的second
成分(tp_time.second
(。