2014-05-12 4 views
3

Je stocke des chaînes dans une liste sous le nom de variable res. Ensuite, je construis une requête qui va regarder dans la liste des chaînes. Cependant, il semble que la variable ne soit pas lue.vérification de la liste à partir de l'instance kdb

C'est ce que je veux dire:

q) hdl: (to a port) 
q) res: `string1`string2`string3 
**q) ans: hdl"select count i by date,sym from trade where date=xxx, sym in `res"** 

Quand j'exécutez la commande, je reçois toujours un jeu de résultats vide. Je sais que le résultat ne peut pas être vide. Alors, comment puis-je corriger ma requête (en gras) pour retourner les résultats?

Veuillez noter que j'effectue la tâche à partir d'une session q dans une boîte unix.

Répondre

5

Quelque chose comme cela devrait fonctionner:

ans:hdl({select count i by date,sym from trade where date=xxx, sym in x};res) 

@mollmerx est correct d'avoir res définies localement et non sur la processus distant, bien que ma requête ci-dessus soit préférable à une sélection fonctionnelle.

2

Vous définissez res sur le processus local. Vous pouvez résoudre ce problème en faisant simplement:

hdl"res:`string1`string2`string3" 

Je pense que vous devrez également supprimer le backtick de res dans votre requête de sélection.

Une autre suggestion consiste à ne pas envoyer une chaîne q à travers le handle. Vous pouvez continuer à mettre en place res, mais faire quelque chose de similaire à ceci:

hdl(?;`trade;((=;`date;xxx);(in;`sym;enlist res));0b;enlist[`cnt]!enlist(count;`i)) 
Questions connexes