Ошибка при передаче символа в качестве аргумента в функцию для fby в kdb - PullRequest
0 голосов
/ 02 ноября 2019

ошибка длины при передаче символа в качестве аргумента функции для fby.

Syntax: (aggr;data) fby group

У меня есть таблица:

 t:([] sym:10?`IBM`AMZN`MSFT; mkt:10?`m1`m2`m3; px:10?100.)

При попытке запустить ниже он завершается с ошибкой длины

{select from t where px=(min;px) fby x}`sym

Как передать группу в качестве аргумента функции?

1 Ответ

2 голосов
/ 02 ноября 2019

Переменная sym (т. Е. Столбец sym) не находится в контексте (как это обычно бывает в операторе выбора), поскольку вы передаете ее извне оператора выбора. Итак, здесь вы просто передаете переменную символьного типа с содержимым «sym» (отсюда и ошибка длины). Следующие работы, проходящие в столбце t[`sym]:

{select from t where px=(min;px) fby x}[t`sym]

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

?[t;enlist (=;`px;(fby;(enlist;min;`px);`sym));0b;()]
sym  mkt px      
-----------------
MSFT m2  17.80839
AMZN m1  30.17723
IBM  m2  41.1597

Или передача имени столбца в функцию:

{?[t;enlist (=;`px;(fby;(enlist;min;`px);x));0b;()]}`sym
...