Я работаю над проектом, который ежедневно записывает показатели производительности сотрудников.
Таблица records
содержит одну строку в день производительности сотрудников;В каждом столбце содержится количество элементов, выполненных в этой категории, а также общее время смены и дата в качестве краткой даты.
В таблице metrics
содержится эффективная дата (короткая дата) и столбцы, соответствующие столбцам производительности.в таблице records
, которая отслеживает ожидаемую часовую производительность.
Таблица employees
просто содержит имена сотрудников и добавочные номера телефона.
В отчете сотрудника может быть задано значение переменнойдиапазоны дат для отображения производительности с течением времени, а GroupLevel(1).GroupOn
также устанавливается через VBA (создает разделы по неделям, месяцам, кварталам и т. д.).
Цель здесь - создать запрос, который возвращает все строкитаблицы записей (которая впоследствии будет отфильтрована на основе whereCondition
, переданного при открытии отчета) вместе со строкой таблицы metrics
, которая является самой высокой датой, меньшей или равной records.date
.До сих пор я смог получить только идентификатор (или любое другое отдельное поле) строки metrics
:
SELECT records.*, employees.first, employees.last, employees.ext,
(
SELECT TOP 1 metrics.id
FROM metrics
WHERE metrics.date<=records.date
ORDER BY metrics.date DESC
) AS MetricsID
FROM employees
INNER JOIN records ON employees.id = records.employee
ORDER BY employees.last;
Я ищу способ написания этого запроса, поэтому яиметь все столбцы в каждой строке - когда я запускаю свою функцию вычисления во время GroupFooter2_Format
, это означает, что мне не придется запрашивать metrics
для каждой строки в диапазоне дат.
Бонусная благодарность, если вы можетеподскажите, как написать запрос, который будет автоматически делить столбец в records
на соответствующий столбец в metrics
, чтобы я мог просто заполнить поля напрямую.