Это усложняется, потому что дата и время находятся в отдельных полях.
Если вы используете последовательный идентификатор Autonum в Access, вы можете использовать CorrespondenceID, чтобы указать самый последний.
Попробуйте что-то вроде этого:
SELECT
Reg.Name,
Course.Name,
C.CorrespondenceDate,
C.CorrespondenceTime
FROM
(SELECT MAX(CorrespondenceID) AS ID, RegistrantID, CourseID
FROM Correspondence
GROUP BY RegistrantID, CourseID) AS CX
INNER JOIN Correspondences AS C ON CX.CorrespondenceID = CX.ID
INNER JOIN Registrants Reg on CX.RegistrantID = Reg.RegistrantID
INNER JOIN Course ON CX.CourseID = Course.CourseID;
Если вы не используете последовательную автономию, вам придется объединить поля даты и времени, чтобы определить, какая из них самая последняя. Вы, вероятно, могли бы заменить MAX(CorrespondenceDate + CorrespondenceTime)
в подзапросе CX выше.
Пара других вещей, которые вы могли бы рассмотреть:
- Используйте одно поле DateTime, а заполнение с помощью Now () облегчит определение последних.
- У вас смешаны множественные числа в именах таблиц "курс" (единственное число) и "регистрант" (множественное число) - вы, вероятно, должны быть последовательны - многие люди предпочитают единственное число
- Я хотел бы рассмотреть возможность регистрации в таблице, которая сопоставляет курс и регистранта, а затем сопоставить соответствие с регистрацией. Мне кажется, это лучше.