Округление даты и времени kdb до ближайшей четной секунды - PullRequest
0 голосов
/ 27 июня 2018

Я новичок в 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
...

Может ли кто-нибудь дать мне несколько советов по этому вопросу? Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Введите 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).

0 голосов
/ 28 июня 2018

Связанная точка с Джонатоном, если ваши временные метки имеют тип «timepan» (он же тип 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

Это может упростить выполнение кода, особенно если вы начинаете переходить на разные уровни детализации сегментов.

Примечание - вы можете увидеть эту встроенную обработку для типа 16 в функции xbar

q)xbar
k){x*y div x:$[16h=abs[@x];"j"$x;x]}

Вне временных интервалов вы также можете упростить чтение для других типов данных, увеличив время до

q)("j"$00:02) xbar 05:00:02 05:00:03 05:00:04
05:00:02 05:00:02 05:00:04
0 голосов
/ 27 июня 2018

Вы можете сделать это с помощью xbar

q)2 xbar 05:00:03 05:00:05
05:00:02 05:00:04

Так что в вашем случае это будет что-то вроде update 2 xbar tp_time from t

...