首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >KDB+如何检查所有列都有相同的符号?

KDB+如何检查所有列都有相同的符号?
EN

Stack Overflow用户
提问于 2018-05-31 14:41:10
回答 2查看 707关注 0票数 2

我有一个包含以下列的表: date、name、cashType、t1、t2、t3。我想添加一个在t1、t2和t3列相等时返回布尔值的列。

这是可行的,但我不得不硬编码t1、t2和t3。列名根据日期的不同而变化。我想在下面的代码中传入一个列的列表dateCols:-3#cols data

代码语言:javascript
复制
update validateSign: {x=/} each flip signum (d2018_05_28; d2018_05_29; d2018_05_30) from data
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 16:59:06

在这种情况下,我们可以使用data dateCols来调用查询中的列列表,

代码语言:javascript
复制
update validateSign:{x=/}each flip signum data dateCols from data

但是,我认为此查询不会生成所需的结果,另一种方法是

代码语言:javascript
复制
update validateSign:1=(count distinct@)each flip signum data dateCols from data
票数 4
EN

Stack Overflow用户

发布于 2018-06-01 03:15:24

因为{x=/}不会告诉你列表中的所有项都是相等的,它是一个滚动布尔值,用于检查下一项是否匹配0或1。像{all x[0]=x}这样的东西会达到你想要的效果。

Jemma指出,如果您的列名可以改变,并且您想要使用select构造,那么您将不得不使用以下形式的函数select:

代码语言:javascript
复制
q)data:([] date:10#.z.D;name:10?`4;cashType:10?`A`B;t1:-5+10?10;t2:-5+10?10;t3:-5+10?10)
q)dateCols:-3#cols data
q)![data;();0b;(1#`validateSign)!enlist ({all flip x[;0]=x};(flip signum@;enlist,dateCols))]
date       name cashType t1 t2 t3 validateSign
----------------------------------------------
2018.05.31 hjkn B        -1 4  0  0
2018.05.31 okdm A        2  0  3  0
2018.05.31 jggp A        3  -3 0  0
2018.05.31 oimo A        -1 -2 -3 1
2018.05.31 naea A        -1 4  3  0
2018.05.31 jadb B        1  0  1  0
2018.05.31 nojg A        4  4  4  1
2018.05.31 keno B        4  2  -5 0
2018.05.31 hdai B        -3 1  -5 0
2018.05.31 mfmf A        0  1  -5 0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50618168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档