从表中选择列类似列表

时间:2019-06-06 09:38:11

标签: kdb

我有下表:

t : ([]date:.z.D - til 3; min_max: ((0w;0w);(5;8);(10;15)))

如下所示:

date       min_max
------------------
2019.06.06 0w 0w  
2019.06.05 5  8   
2019.06.04 10 15  

请注意,min_max列是一个列表,因此其类型= "F"

问题:

如何选择min_max = (0w;0w)的行,以使查询结果只给出第一行:

date       min_max
------------------
2019.06.06 0w 0w  

3 个答案:

答案 0 :(得分:3)

一种做到这一点的方法是使用以下select语句,该语句与match-left副词匹配:

q)select from t where min_max ~\: (0w;0w)
date       min_max
------------------
2019.06.06 0w 0w
q)\ts:1000 select from t where min_max ~\: (0w;0w)
2 1904

或者,您也可以使用以下使用in关键字的语句。尽管第二个查询使用更多的内存,但这两个查询在速度上是可比的:

q)select from t where min_max in enlist (0w;0w)
date       min_max
------------------
2019.06.06 0w 0w
q)\ts:1000 select from t where min_max in enlist (0w;0w)
2 1936

答案 1 :(得分:2)

两种方法:

使用'?' (第一次出现)

q) select from t where i in min_max?enlist 2#0w

使用'='(获取所有出现次数)

q)  select from t where all@'min_max=\:2#0w

输出

date       min_max
------------------
2019.06.06 0w 0w  

答案 2 :(得分:2)

可以使用匹配(〜)来实现:

q)select from t where min_max ~\: (0w;0w)
date       min_max
------------------
2019.06.06 0w 0w

https://code.kx.com/v2/ref/match/