KDB Выберите из многораздельной таблицы, где дата меньше заданной даты - 1 день - PullRequest
1 голос
/ 02 октября 2019

Я хотел бы выбрать из многораздельной таблицы, где дата - это самая высокая дата строго ниже заданной даты d.

. Я могу сделать следующее:

d:2019.10.02;
{select from x where date = max date} select from t where date < d

гдеt - это моя секционированная таблица.

Проблема с вышеупомянутым запросом заключается в том, что он очень медленный, так как сначала нужно загрузить все даты, которые строго старше d, а затем удалить max dateоб этом.

Ответы [ 4 ]

3 голосов
/ 02 октября 2019

Чтобы выбрать все даты, которые являются более ранними, чем указанная вами дата, вы можете использовать оператор выбора ниже:

select from t where date=max date where date<d

Где t - ваша секционированная таблица, а dваша указанная дата.

1 голос
/ 03 октября 2019
select from table where date=(last .Q.pv where .Q.pv < d)
1 голос
/ 02 октября 2019

Если вы просто хотите выбрать из максимальной даты в дате секционированный hdb

Предположим, что максимальный раздел заполненной даты меньше 2019.08.20 равен 2019.08.07

q)d:2019.08.20
q)select from t where date=max date where date<d

Это связано с тем, что тип раздела доступен как переменная после загрузки в БД (т. Е. Дата, месяц, int и т. Д.). Это будет переменная .Q.pf.

0 голосов
/ 02 октября 2019

kdb + хранит переменную в памяти, которая содержит все даты в вашей базе данных.

select from telemetry where date=desc[date]1

Выше, где предложение будет сортировать это по наибольшему -> наименьшее

Выбор индекса 1 отфильтрует максимальную дату из вашего запроса (без предварительного запроса всего набора данных).

...