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

将kdb日期时间四舍五入到最近的偶数秒,kdb,Kdb,我是KDBQ的新手。我试图将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

我是KDBQ的新手。我试图将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
...
有人能给我一些关于这个问题的提示吗? 非常感谢

您可以使用xbar执行此操作

因此,在您的情况下,它类似于从t更新2 xbar tp_时间,您可以使用xbar执行此操作

因此,在您的情况下,它类似于从t更新2 xbar tp_时间

问题中的tp_时间类型是second v,因此2 xbar tp_时间将很好地工作;但是,如果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
这里我们访问tp_time的第二个组成部分tp_time。第二个。

问题中的tp_time类型是second v,因此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

这里我们访问的是tp_time的第二个组成部分tp_time.second.

与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
这可以使代码更容易理解,特别是当您开始进入不同级别的bucket粒度时

注意-您可以在xbar函数中看到类型16的内置处理

q)xbar
k){x*y div x:$[16h=abs[@x];"j"$x;x]}
在timespans之外,您还可以通过将timebucket强制转换为long来更容易地读取其他数据类型

q)("j"$00:02) xbar 05:00:02 05:00:03 05:00:04
05:00:02 05:00:02 05:00:04

与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
这可以使代码更容易理解,特别是当您开始进入不同级别的bucket粒度时

注意-您可以在xbar函数中看到类型16的内置处理

q)xbar
k){x*y div x:$[16h=abs[@x];"j"$x;x]}
在timespans之外,您还可以通过将timebucket强制转换为long来更容易地读取其他数据类型

q)("j"$00:02) xbar 05:00:02 05:00:03 05:00:04
05:00:02 05:00:02 05:00:04