МАКС () и МАКС () ПО РАЗДЕЛУ ошибкой продуктов 3504 в Запросе Teradata

Я пытаюсь произвести таблицу результатов с последней завершенной датой курса каждого кода курса, а также последний завершенный курс кодирует в целом для каждого сотрудника. Ниже мой запрос:

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

Если я удаляю МАКСА () ПО (РАЗДЕЛ...) строка, запрос выполняется очень хорошо, таким образом, я изолировал проблему к той строке, но после поиска этих форумов и Интернета я не вижу то, что я делаю неправильно. Кто-либо может помочь?

8
задан bernie 14 February 2013 в 23:32
поделиться

1 ответ

Как говорит 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
5
ответ дан 5 December 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: