#kdb
#kdb
Вопрос:
Я хотел бы преобразовать следующий запрос в один запрос
tab:([price:til 10]side:10?-1 1;qty:990 2 * til 10);
a:select[>price] from tab where side=1;
b:select from a where sums[qty] <= max(min[sums qty];100);
или
select from (select[>price] from tab where side=1) where sums[qty] <= max(min[sums qty];100);
Я попытался реализовать оператор select с помощью fby следующим образом:
select from tab where side=-1, ({sy:sums[y]; sy<=max(min[sy];x)}[100];qty) fby side
Однако это не сортирует таблицу tab
правильно, т. Е. в соответствии с >price
.
Я полагаю, можно было бы предварительно отсортировать таблицу, т.е.
select from `price xasc tab ...
Однако это может показаться вычислительно неэффективным решением. Не мог бы какой-нибудь мудрый Q God, пожалуйста, посоветовать мне, как наиболее эффективно достичь этого.
Спасибо, с наилучшими пожеланиями
Ответ №1:
Если таблицу необходимо отсортировать в порядке убывания в соответствии с ценой для sums qty
расчета, то использование xdesc
или desc
кажется неизбежным шагом.
Это самая краткая версия вашего запроса, которую я смог найти.
select from desc tab where side=1,sums[qty]<=max(min sums qty;100)
Ответ №2:
Я изо всех сил пытаюсь понять, почему вы выполняете вычисления таким образом. Сортировка будет иметь влияние, поскольку она повлияет на то, какое значение будет первым, прежде чем величины будут постепенно увеличиваться с суммами. Есть ли причина, по которой вы не используете что-то подобное:
q)select from tab where qty = max qty
price| side qty
-----| ---------
9 | 1 1008
q)select from tab where qty = (max;qty) fby side
price| side qty
-----| ---------
8 | -1 1006
9 | 1 1008