我是kdb的新用户。我正在尝试将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
...
有人可以给我一些有关此问题的提示吗? 非常感谢!
答案 0 :(得分:3)
与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
答案 1 :(得分:1)
您可以使用xbar
q)2 xbar 05:00:03 05:00:05
05:00:02 05:00:04
因此,在您的情况下,它将类似于update 2 xbar tp_time from t
答案 2 :(得分:0)
询问的问题中的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
在这里,我们正在访问second
(tp_time
)的tp_time.second
组成部分。