根据负数的正值更新表值

时间:2018-10-15 20:02:21

标签: kdb qsqlquery

我正在尝试根据查询是多头(+ ve值)还是短头(-ve值)来对查询中的交易进行分类

q)R:select sum size by sym from update size:neg size from trades where trades[`side]=`sell
q)R
sym | size
----| ------
AAPL| 22321
CSCO| -20790
DELL| -53614
GOOG| 62652
IBM | 77839
MSFT| -40878
NOK | 14767
ORCL| -53922

我设法到达了这里,但是我似乎无法在没有错误消息的情况下用长值和负值更新正值和负值。 转换+ ve值的失败尝试与此类似

update size:`long from R where size>0
update size:`long from R where R[`size]>0

3 个答案:

答案 0 :(得分:1)

更新失败,因为您试图将一些长类型的列更新为符号类型,这将导致混合列表:

q)update size:?[size>0;`long;`short] from R

答案 1 :(得分:0)

稍快的版本:

q) update new_size:`short`long size>0 from R

答案 2 :(得分:0)

值得注意的是,对空0n的处理要少于任何数字,如果R包含空值,则默认为short,在某些情况下会给您带来意外的结果。 / p>

以下空检查将解决这种情况。

q)update size:?[null size;`;?[size>0;`long;`short]] from R

但是,在某些情况下,最好默认为long或short。