KDB Дискретный Выбор нескольких элементов

#select #kdb

Вопрос:

Из схемы ИСПРАВЛЕНИЯ у меня есть столбец с именем channelId. Столбец channelId может иметь значение ИМЯ_СЕРВЕРА-Входящий, ИМЯ_СЕРВЕРА-Клиент, ИМЯ_СЕРВЕРА-Место проведения.

В настоящее время пытаюсь выполнить эффективный выбор, выбрав первые 10 000 строк с помощью:

 'time xdesc select [2500] from table_name where (channelID like "*Inbound)  

Это хорошо работает и извлекает первые 2500 строк, в которых есть входящий идентификатор канала.

Я хотел бы эффективно выполнить запрос, в котором я выбираю первые 2500 экземпляров, в которых идентификатор канала имеет «Входящий», «Клиент» или «Место проведения».

Единственный мыслительный процесс, который у меня здесь есть, — это сделать самостоятельное соединение на столе. Результирующий набор должен составлять 7500 строк, где он равен 2500 для каждого идентификатора канала («Входящий», «Клиент» или «Место проведения»).

Есть какие-нибудь идеи?

Ответ №1:

Я думаю, что вы, возможно, ищете что-то вроде:

 select from table_name where any channelId like/: ("*Inbound";"*Client";"*Venue"), 2499 gt;= (iasc;i) fby channelID  

Первая часть предложения where отфильтрует таблицу только до тех строк, где идентификатор канала указан в идентификаторах, которые вы ищете.
Вторая часть возьмет эту подтаблицу и будет использовать fby для возврата, где индексы в наборе каждого оставшегося идентификатора канала меньше или равны 2499 (из-за индексации, начинающейся с 0).