Как применить максимальную функцию для каждой строки в KDB?

Я хочу убедиться, что все значения в столбце x не меньше 0,5, поэтому я делаю:

update x:max (x 0.5) from myTable

Но это дает ошибку (в Studio For KDB+):

An error occurred during execution of the query.
The server sent the response:
type
Studio Hint: Possibly this error refers to wrong type, e.g `a+1

Что не так?


person mchen    schedule 14.04.2014    source источник


Ответы (3)


Вы можете попробовать использовать |

q)update x|0.5 from myTable
person WooiKent Lee    schedule 14.04.2014

Он должен работать. Это сработало для меня. Это запрос, который я использовал для тестирования:

update x:max(x;0.5) from myTable

-- Проверить точку с запятой в функции max

person Rahul    schedule 21.04.2014
comment
Очень приятно - мне не приходило в голову, что это сработает, но это работает. Так же быстро, как (по общему признанию, более идиоматично) x|.5 - person mollmerx; 22.04.2014

Попробуйте векторное условие kdb, похожее на case-when в SQL:

q)t:([] a:6?.9)

q)t
a
---------
0.4237094
0.5712045
0.8705158
0.2075746
0.8549775
0.3951729

q)update ?[a<0.5;0.5;a] from t
a
---------
0.5
0.5712045
0.8705158
0.5
0.8549775
0.5
q)
person Ryan Hamilton    schedule 14.04.2014
comment
Условное векторное выражение в этом простом случае не нужно, менее читабельно и на моей машине в 4 раза медленнее. - person mollmerx; 17.04.2014