我有下表:
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
答案 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