Упрощая немного, я предполагаю, что у вас есть какие-то случайные временные метки в наборе данных, как это:
time price
--------------------------------------
2015.01.20D22:42:34.776607000 7
2015.01.20D22:42:34.886607000 3
2015.01.20D22:42:36.776607000 4
2015.01.20D22:42:37.776607000 8
2015.01.20D22:42:37.886607000 7
2015.01.20D22:42:39.776607000 9
2015.01.20D22:42:40.776607000 4
2015.01.20D22:42:41.776607000 9
поэтому некоторые недостающие секунды там. Я собираюсь назвать эту таблицу t
. Так что если вы делаете на секунду типа запроса, очевидно, секунданты, которые отсутствуют по-прежнему отсутствуют:
q)select max price by time.second from t
second | price
--------| -----
22:42:34| 7
22:42:36| 4
22:42:37| 8
22:42:39| 9
22:42:40| 4
22:42:41| 9
Чтобы получить недостающие секунды, вы должны присоединиться списком нулей. В этом случае мы знаем, что данные идут от 22:42:34 до 22:42:41, но на самом деле вам нужно будет найти минимальное/максимальное время и использовать это для создания временной таблицы «null» для объединения:
q)([] second:22:42:34 + til 1+`int$22:42:41-22:42:34 ; price:(1+`int$22:42:41-22:42:34)#0N)
second price
--------------
22:42:34
22:42:35
22:42:36
22:42:37
22:42:38
22:42:39
22:42:40
22:42:41
Затем покинул присоединиться:
q)([] second:22:42:34 + til 1+`int$22:42:41-22:42:34 ; price:(1+`int$22:42:41-22:42:34)#0N) lj select max price by time.second from t
second price
--------------
22:42:34 7
22:42:35
22:42:36 4
22:42:37 8
22:42:38
22:42:39 9
22:42:40 4
22:42:41 9
Вы можете использовать fills
или любой ваша любимая начинку эвристики после этого.
q)fills `second xasc asc ([] second:22:42:34 + til 1+`int$22:42:41-22:42:34 ; price:(1+`int$22:42:41-22:42:34)#0N) lj select max price by time.second from t
second price
--------------
22:42:34 7
22:42:35 7
22:42:36 4
22:42:37 8
22:42:38 8
22:42:39 9
22:42:40 4
22:42:41 9
(Обратите внимание на то на second
перед fills
!)
Кстати для больших таблиц это будет гораздо быстрее, чем цикл. Циклы в q - это, как правило, плохая идея.
EDIT
Вы можете использовать запятую присоединиться тоже обе таблицы должна быть сконструирована на second
колонки
t,t1
(где t1 является нулевой заполненной таблица ключа на second
)
Я не тестировал его, но я подозреваю, что он будет немного быстрее, чем версия lj
.
Можете ли вы добавить пример любого кода, который у вас уже есть, а также код, в котором вы сейчас извлекаете данные? Прочтите https://stackoverflow.com/help/mcve для получения информации о том, как написать хороший вопрос. –
Я решил проблему, используя aj. спасибо в любом случае – Demi