У меня возникли трудности с обновлением записей в базе данных на основе самой последней даты, и я ищу некоторые рекомендации. Кстати, я новичок в 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, но безуспешно.
Может ли кто-нибудь указать мне в правильном направлении? Каков «обычный» синтаксис для обновления записи базы данных на основе самой последней даты?