Я пытаюсь произвести таблицу результатов с последней завершенной датой курса каждого кода курса, а также последний завершенный курс кодирует в целом для каждого сотрудника. Ниже мой запрос:
SELECT employee_number,
MAX(course_completion_date)
OVER (PARTITION BY course_code) AS max_course_date,
MAX(course_completion_date) AS max_date
FROM employee_course_completion
WHERE course_code IN ('M910303', 'M91301R', 'M91301P')
GROUP BY employee_number
Этот запрос производит следующую ошибку:
3504 : Selected non-aggregate values must be part of the associated group
Если я удаляю МАКСА () ПО (РАЗДЕЛ...) строка, запрос выполняется очень хорошо, таким образом, я изолировал проблему к той строке, но после поиска этих форумов и Интернета я не вижу то, что я делаю неправильно. Кто-либо может помочь?
Как говорит Ponies в комментарии, нельзя смешивать OLAP-функции с агрегатными функциями.
Возможно, проще получить последнюю дату завершения для каждого сотрудника и присоединить ее к набору данных, содержащему последнюю дату завершения для каждого из трех целевых курсов.
Это непроверенная идея, которая, надеюсь, направит вас на правильный путь:
SELECT employee_number,
course_code,
MAX(course_completion_date) AS max_date,
lcc.LAST_COURSE_COMPLETED
FROM employee_course_completion ecc
LEFT JOIN (
SELECT employee_number,
MAX(course_completion_date) AS LAST_COURSE_COMPLETED
FROM employee_course_completion
WHERE course_code IN ('M910303', 'M91301R', 'M91301P')
) lcc
ON lcc.employee_number = ecc.employee_number
WHERE course_code IN ('M910303', 'M91301R', 'M91301P')
GROUP BY employee_number, course_code, lcc.LAST_COURSE_COMPLETED