Я недавно наткнулся на эту тему, когда пользователь пытался вернуть некоторые данные, используя вспомогательный запрос, основанный на максимальном значении другого запроса, Original Post это именно то, что я хотел бы делать.Пытаться воспроизвести запрос MySQL в MS Access
Что я пытаюсь сделать, это извлечь самую последнюю запись в журнале из моей таблицы аудита «Modification_Log», чтобы я мог перечислить самую последнюю дату изменения и кто сделал ее более элегантным способом, чем получение нескольких запросов , Здесь я подробно рассмотрел Database Administrator's Stack, я не прошу, чтобы меня кормили ложкой, но я просто понятия не имею, что происходит не так!
SELECT Employee.EmployeeID, Employee.PositionID, Employee.Title, Employee.Firstname, Employee.Surname, Employee.Email, Modification_Log.ModifiedDate, Modification_Log.ModifiedEmployee
FROM Employee INNER JOIN Modification_Log ON Employee.EmployeeID = Modification_Log.RecordID INNER JOIN
(SELECT Modification_Log.RecordID, Max(Modification_Log.ModificationID) As NewestModificationID
FROM Modification_Log
GROUP BY Modification_Log.RecordID) As LogMax
ON Employee.EmployeeID = LogMax.RecordID AND Modification_Log.ModificationID = LogMax.NewestModificationID
WHERE Employee.EmployeeID = 3 AND Modification_Log.TableName = 'Employee'
EDIT: Я сделал, как @maxhugen предложил ниже, и вот .. Доступ в это бесконечная мудрость переставить запрос для ссылки соединяемых запроса первый, я редактировал его и снова заменен подзапросом , на этот раз он работает:
SELECT Employee.EmployeeID, Employee.PositionID, Employee.Title, Employee.Firstname, Employee.Surname, Employee.Email, Modification_Log.ModifiedDate, Modification_Log.ModifiedEmployee
FROM
(SELECT Modification_Log.RecordID, Max(Modification_Log.ModificationID) As NewestModificationID
FROM Modification_Log
GROUP BY Modification_Log.RecordID) As LogMax
INNER JOIN (Employee INNER JOIN Modification_Log ON Employee.EmployeeID = Modification_Log.RecordID) ON (LogMax.NewestModificationID = Modification_Log.ModificationID) AND (LogMax.RecordID = Employee.EmployeeID)
WHERE Employee.EmployeeID=3 AND Modification_Log.TableName='Employee';
Спасибо Макс, я сделал это, и он изменил мои соединения, я действительно не понимаю, какая разница! но я редактировал свой вопрос, чтобы показать рабочую версию. Доступ глуп. –
Из вашего Редактирования выше, похоже, что запрос работает нормально. Могли ли вы определить причину проблемы? (Любопытно, что я!) – maxhugen
Да, теперь это работает. Я действительно не слишком уверен, я снова изменил запрос после его работы и могу только предположить, что Access применяет какое-то правило в порядке объединения при использовании подзапроса. Казалось бы, что подзапрос должен немедленно следовать за предложением FROM, в противном случае возникает ошибка синтаксиса (отсутствующий оператор). –