Запрос KDB возвращает больше 2 столбцов вместо 1 для фильтра max - PullRequest
0 голосов
/ 15 января 2020

Я просто хочу создать один отчет, в котором мне нужна максимальная цена для каждого символа, поэтому я написал следующий запрос, который отлично работает на PROD, но не работает на UAT. Так что просто хотел узнать, является ли следующий запрос подходящим или нет.

select from (select sum price by sym,time,src from Table where date within(2019.12.01;2019.12.31) ) where size=(max;price) fby tier

Выше запроса возвращает 2 столбца для каждого символа вместо 1. Следующим является внутренний запрос результата, т.е. select sum price by sym,time,src from Table where date within(2019.12.01;2019.12.31)

t:([]time:8#2019.03.11D09:00+"v"$0 4 8 10;sym:8#`GOOG`GOOG`MSFT`MSFT;src:8#`L`O`N`O;price:36.01 35.01 35.5 31.1 39.01 38.01 33.5 32.1;size:8#1427 708 7810 1100)
time                          sym  src price
--------------------------------------------
2019.03.11D09:00:00.000000000 GOOG L   36.01 
2019.03.11D09:00:04.000000000 GOOG O   35.01 
2019.03.11D09:00:08.000000000 MSFT N   35.5  
2019.03.11D09:00:10.000000000 MSFT O   31.1  
2019.03.11D09:00:00.000000000 GOOG L   39.01 
2019.03.11D09:00:04.000000000 GOOG O   38.01 
2019.03.11D09:00:08.000000000 MSFT N   33.5  
2019.03.11D09:00:10.000000000 MSFT O   32.1  

И вывод для select from (select sum price by sym,time,src from Table where date within(2019.12.01;2019.12.31) ) where size=(max;price) fby tier:

t[0,2,4,7]
time                          sym  src price 
---------------------------------------------
2019.03.11D09:00:00.000000000 GOOG L   36.01 
2019.03.11D09:00:08.000000000 MSFT N   35.5  
2019.03.11D09:00:00.000000000 GOOG L   39.01 
2019.03.11D09:00:10.000000000 MSFT O   32.1  

1 Ответ

0 голосов
/ 15 января 2020

Я подозреваю, что в наборе данных, который вы указали в вопросе, чего-то не хватает. Результаты ваших внутренних запросов - все с плавающей точкой с остатками, так как size - это длинный, нет никакого смысла в том, что size=(max;price) возвращает какие-либо результаты.

Чтобы ответить на ваш вопрос в самом общем смысле, получить максимальную цену по sym:

select from t where price=(max;price) fby sym

Применение этого к предоставленному вами внутреннему результату

q)select from t where price=(max;price) fby sym
time                          sym  src price size
-------------------------------------------------
2019.03.11D09:00:08.000000000 MSFT N   35.5  7810
2019.03.11D09:00:00.000000000 GOOG L   39.01 1427
...