Выберите из таблицы, где столбец, как список - PullRequest
1 голос
/ 06 июня 2019

У меня есть следующая таблица:

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 ]

3 голосов
/ 06 июня 2019

Один из способов сделать это - использовать следующий оператор выбора, который использует совпадение с наречи слева на каждом:

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
2 голосов
/ 06 июня 2019

Можно использовать совпадение (~) для достижения этого:

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

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

2 голосов
/ 06 июня 2019

Пара способов сделать это:

Использование '?' (чтобы получить первое вхождение)

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  
...