#ms-access
Вопрос:
Вопрос, который у меня есть, касается двух выделенных строк на прилагаемом рисунке. Результаты получены в результате запроса, выполненного по двум таблицам.
Столбцы 1-7 взяты из одной таблицы, столбцы 8-13-из другой.
Как вы можете видеть, у меня есть две записи для идентификатора 1. Это связано с тем, что во 2-й таблице есть две записи, относящиеся к сотруднику 693.
Мне всегда нужна только одна запись на идентификатор, критерий заключается в том, что результат, используемый из второй таблицы, должен быть тем, у которого поле DateUpdated (меньше или равно) и ближе всего к дате транзакции в столбце 7.
Есть какие-нибудь идеи о том, как мне это сделать?
ОБНОВЛЕНИЕ* Хорошо, благодаря первому предложению, моя таблица результатов теперь выглядит как 2-я картинка. У меня есть столбец, в котором показаны различия между двумя датами. Итак, как мне теперь получить результаты, чтобы показывать только строку с наименьшим числом для каждого идентификатора?
Обновить***
кр.
Крис
Ответ №1:
Используйте агрегирующий запрос с:
Min(Abs(DateDiff("d", [Transaction], [Date Updated]))) As NearestUpdateDate
и Сгруппируйте По оставшимся полям.
Все могло бы пойти вот так:
SELECT
tblEmployee.Id,
tblEmployee.EmployeeId,
tblEmployee.Transaction,
Min(Abs(DateDiff("d",[Transaction],[Date Updated]))) AS MinDiff
FROM
tblEmployee
INNER JOIN
tblEmployeeWages ON
tblEmployee.EmployeeId = tblEmployeeWages.EmployeeId
GROUP BY
tblEmployee.Id,
tblEmployee.EmployeeId,
tblEmployee.Transaction;
Сохраните это как qdyEmployeeDate
. Затем используйте это:
SELECT
tblEmployee.Id,
tblEmployee.EmployeeId,
tblEmployee.Transaction,
Min(tblEmployeeWages.[Date Updated]) AS DateUpdated
FROM
(tblEmployee
INNER JOIN
qdyEmployeeDate ON
tblEmployee.Id = qdyEmployeeDate.Id)
INNER JOIN
tblEmployeeWages ON
tblEmployee.EmployeeId = tblEmployeeWages.EmployeeId
WHERE
(tblEmployee.Transaction = DateAdd("d",[MinDiff],[Date Updated]))
OR
(tblEmployee.Transaction=DateAdd("d",-[MinDiff],[Date Updated]))
GROUP BY
tblEmployee.Id,
tblEmployee.EmployeeId,
tblEmployee.Transaction;
получить:
Теперь у вас есть идентификаторы и две даты для использования. Этот запрос вы можете использовать в новом запросе с внешними соединениями с таблицами для извлечения оставшихся полей.
Обратите внимание, пожалуйста, что у вас есть две записи о сотрудниках за 693 года, обе с одинаковыми датами обновления, каждая из которых отличается от этих дат, таким образом, вы получите одинаковую дату обновления для обеих записей о сотрудниках. В этом вы должны разобраться сами.
Комментарии:
1. Это просто дало бы мне разницу между датами, верно? Тогда как бы я отображал только строки с самой низкой датой? Когда я использую этот метод, в столбце 13 просто отображаются различия между двумя датами. Он не показывает только запись с наименьшей разницей?
2. Большое спасибо за вашу помощь. Из этих примеров я получил рабочее решение.