2016-09-20 6 views
0

Я использую KDB с инструментом, который позволяет мне задавать запросы. С помощью этого инструмента только параметры (значение фильтра) могут быть изменены при взаимодействии с пользователем, а не в структуре запроса. Мне нужно, чтобы запрос выполнялся под действием пользователя. По умолчанию я хочу, чтобы он выбирал все строки, и после того, как он что-то выбрал, я хочу, чтобы запрос был отфильтрован по его выбору.выбрать из с подстановочным знаком, в Q KDB

Например: По умолчанию: выбрать из цитаты, где символ = *

После того как пользователь выбирает символ: выбрать из цитаты, где символ = `AAPL

Однако пример по умолчанию Безразлично» t, потому что в KDB нет шаблона *, в отличие от SQL. Как я могу получить все строки по умолчанию?

ответ

3

Не уверен, что именно вы пытаетесь достичь здесь или какие ваши конкретные ограничения.

Если вы говорите, что equals (=) исправлено, вы можете выбрать только один символ ... но вы хотите вернуть все строки? Технически это может быть сделано в операторе отбора, как так

select from table where symbol=symbol 

, но это может не работать, если ваш «инструмент» ожидает ввод символа типа.

Чтобы использовать подстановочный знак, вам нужно «как» вместо равных, но похоже, что вы не можете это контролировать.

Вы считаете, что этот инструмент предназначен только для одного символьного фильтра по причине? Возможно, возвращать все строки было бы слишком много данных, возможно, это было бы слишком медленно, возможно, это заняло бы слишком много памяти. Чувствуется, что вы пытаетесь взломать ярлык

+0

Благодарим вас за ответ. Я могу контролировать «как» вместо равных. Что будет с подстановочным знаком? – MarinD

+0

выберите из t, где символ «? *» – terrylynch

+0

На самом деле, это не будет возвращать нулевые символы, это: select from t, где символ, например, завербовать «*», – terrylynch

1

Вы можете указать колонку в строке и использовать ее.

Способ достижения ваших требований - либо выбрать для всех сим (если пользователь не указывает фильтр или не выбирает подмножество, которое определяет пользователь). Вы можете реализовать это как;

q)show myTable:update stamps:dates+'times from ([]syms:`AAPL`GOOG`PRDC`LALA`LOLO;times:5?.z.T;dates:5?.z.D) 
syms times  dates  stamps 
---------------------------------------------------------- 
AAPL 00:48:15.333 2003.04.10 2003.04.10D00:48:15.333000000 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
PRDC 00:15:49.627 2016.05.21 2016.05.21D00:15:49.627000000 
LALA 01:30:32.099 2015.01.04 2015.01.04D01:30:32.099000000 
LOLO 00:31:19.910 2013.12.01 2013.12.01D00:31:19.910000000 
q)filter1:{[allSyms;usrSyms] symList:$[all null usrSyms;allSyms;usrSyms]; select from myTable where syms in symList}[exec distinct syms from myTable;] 
/filter1 is a projection so you don't have to query the table for all syms each time 
q)filter1`GOOG`APPL 
syms times  dates  stamps 
---------------------------------------------------------- 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
q)filter1`GOOG`AAPL 
syms times  dates  stamps 
---------------------------------------------------------- 
AAPL 00:48:15.333 2003.04.10 2003.04.10D00:48:15.333000000 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
q)filter1` 
syms times  dates  stamps 
---------------------------------------------------------- 
AAPL 00:48:15.333 2003.04.10 2003.04.10D00:48:15.333000000 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
PRDC 00:15:49.627 2016.05.21 2016.05.21D00:15:49.627000000 
LALA 01:30:32.099 2015.01.04 2015.01.04D01:30:32.099000000 
LOLO 00:31:19.910 2013.12.01 2013.12.01D00:31:19.910000000 
q) 

Я бы предпочел реализовать что-то подобное;

q)filter2:{[usrSyms] ?[myTable;$[all null usrSyms;();enlist(in;`syms;enlist usrSyms)];0b;()]} 
q)filter2` 
syms times  dates  stamps 
---------------------------------------------------------- 
AAPL 00:48:15.333 2003.04.10 2003.04.10D00:48:15.333000000 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
PRDC 00:15:49.627 2016.05.21 2016.05.21D00:15:49.627000000 
LALA 01:30:32.099 2015.01.04 2015.01.04D01:30:32.099000000 
LOLO 00:31:19.910 2013.12.01 2013.12.01D00:31:19.910000000 
q)filter2`GOOG 
syms times  dates  stamps 
---------------------------------------------------------- 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
q)filter2`GOOG`AAPL 
syms times  dates  stamps 
---------------------------------------------------------- 
AAPL 00:48:15.333 2003.04.10 2003.04.10D00:48:15.333000000 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
q) 

 Смежные вопросы

  • Нет связанных вопросов^_^