将kdb日期时间舍入到最接近的偶数秒

时间:2018-06-27 20:05:14

标签: kdb

我是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
...

有人可以给我一些有关此问题的提示吗? 非常感谢!

3 个答案:

答案 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类型为secondv),因此2 xbar tp_time可以很好地工作;但是,如果tp_time的类型为timet)或timespann),则以下内容将生成正确的结果,而与数据类型无关。

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

在这里,我们正在访问secondtp_time)的tp_time.second组成部分。