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



我是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_timetime(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_timesecond成分(tp_time.second(。

最新更新