У меня есть рабочий запрос, который слишком долго выполняется. Он используется для заполнения поля формы доступа списком различных контрактов, упорядоченных по дате начала.MS Access - проблемы с использованием переменных в выражении WHERE
Следующий запрос возвращает список отдельных дат начала контракта для нескольких товаров (в которых указаны даты начала контракта), где дата начала контракта (DELSTART) больше или равна текущей дате (PRICEDATE).
Функция returndelivery возвращает атрибут даты контракта, преобразованный в double, функция returnnumericdate возвращает двойное значение с даты (yyyymmdd).
SELECT DISTINCT (tblFuturesPrices.Period),
returnnumericdate(returndelivery([PERIOD],"S")) AS DELSTART,
ReturnNumericDate(Date()) AS PRICEDATE
FROM tblFuturesPrices
WHERE returnnumericdate(returndelivery([PERIOD],"S")) >= ReturnNumericDate(Date())
GROUP BY PERIOD
ORDER BY returnnumericdate(returndelivery([PERIOD],"S"));
В идеале я хотел бы обратиться к DELSTART переменных и PRICEDATE в ИНЕКЕ, но Access запрашивает значение переменной, когда я делаю так. Я думаю, что запрос занимает больше времени, чем нужно, потому что мне приходится многократно использовать свои пользовательские функции.
Исходная таблица (tblFutures) содержит цены на каждый товар/контракт на рабочие дни, возвращающиеся на 6 месяцев.
Заранее спасибо.
Является ли оптимизатор достаточно умен, чтобы заметить, что три повторения «returnnumericdate» (returndelivery ([PERIOD], «S»)) нужно оценивать только один раз или это поможет вставить это в производную таблицу или «VIEW»? – onedaywhen
Я думаю, что я мог бы заполнить временную таблицу, которая обновляется только при загрузке формы и изменении дня. Я надеялся, что объявление DELSTART будет содержать значения таблиц, а ссылки на них позже будут быстрее. – GazG