MAX() and MAX() OVER PARTITION BY produces error 3504 in Teradata Query

后端 未结 5 1350
猫巷女王i
猫巷女王i 2021-02-15 10:05

I am trying to produce a results table with the last completed course date for each course code, as well as the last completed course code overall for each employee. Below is my

5条回答
  •  醉话见心
    2021-02-15 10:52

    Logically OLAP functions are calculated after GROUP BY/HAVING, so you can only access columns in GROUP BY or columns with an aggregate function. Following looks strange, but is Standard SQL:

    SELECT employee_number,
           MAX(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, course_code
    

    And as Teradata allows re-using an alias this also works:

    SELECT employee_number,
           MAX(max_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, course_code
    

提交回复
热议问题