У меня проблемы с обновлением записей в базе данных на основе самой последней даты, и я ищу некоторые рекомендации. Кстати, я новичок в SQL.
В качестве фона у меня есть приложение Windows Forms с SQL Express, и я использую ADO.NET для взаимодействия с базой данных. Приложение предназначено для того, чтобы пользователь мог отслеживать посещаемость сотрудниками различных курсов, которые необходимо посещать на регулярной основе (например, каждые 6 месяцев, каждый год и т. Д.). Например, они могут получить данные, чтобы увидеть, когда сотрудники последний раз посещали данный курс, а также обновить даты посещения, если сотрудник недавно прошел курс.
У меня есть три таблицы данных:
- EmployeeDetailsTable - простой список имен сотрудников, адреса электронной почты и т. Д., Каждый с уникальным идентификатором
- CourseDetailsTable - простой список курсов, каждый с уникальным идентификатором (например, 1, 2, 3 и т. Д.)
- AttendanceRecordsTable - имеет 3 столбца {EmployeeID, CourseID, AttendanceDate, Comments}
Для любого данного курса у сотрудника будет история посещений, т. Е. Если курс необходимо посещать каждый год, то у него будет одна запись за столько лет, сколько он провел в компании.
Что я хочу сделать, это обновить поле «Комментарии» для данного сотрудника и данного курса на основе самой последней даты посещения. Каков «правильный» синтаксис SQL для этого?
Я пробовал много вещей (как показано ниже), но не могу заставить его работать:
UPDATE AttendanceRecordsTable
SET Comments = @Comments
WHERE AttendanceRecordsTable.EmployeeID = (SELECT EmployeeDetailsTable.EmployeeID FROM EmployeeDetailsTable WHERE (EmployeeDetailsTable.LastName =@ParameterLastName AND EmployeeDetailsTable.FirstName =@ParameterFirstName)
AND AttendanceRecordsTable.CourseID = (SELECT CourseDetailsTable.CourseID FROM CourseDetailsTable WHERE CourseDetailsTable.CourseName =@CourseName))
GROUP BY MAX(AttendanceRecordsTable.LastDate)
После долгих поисков я обнаружил, что MAX является агрегатной функцией, и поэтому мне нужно использовать GROUP BY. Я также пытался использовать ключевое слово HAVING, но безуспешно.
Кто-нибудь может указать мне правильное направление? Каков «обычный» синтаксис для обновления записи в базе данных на основе самой последней даты?