繁体   English   中英

获取最大组中的其余行

[英]Get the rest of the row in a max group by

我正在尝试获得某人最近通过的培训。 为此,我认为效果很好

CREATE OR REPLACE FORCE VIEW MYAPP.most_recent_training (
  employee_id, course_id, date_taken
) AS SELECT
       who.employee_id,
       course.course_id,
       MAX(sess.end_date) date_taken
  FROM employee_session_join esj
  JOIN training_session sess on sess.session_id = esj.session_id
  JOIN course_version vers on vers.version_id = sess.version_id
  JOIN course course on course.course_id = vers.course_id
  JOIN employee who on who.employee_id = esj.employee_id
  WHERE esj.active_flag = 'Y'
    AND sess.active_flag = 'Y'
    AND course.active_flag = 'Y'
    AND who.active_flag = 'Y'
    AND esj.approval_status = 5 -- successfully passed
GROUP BY who.employee_id, course.course_id

好的,所以我的查询效果很好。 这是我的问题-我还需要有效期,以便我知道它们何时不合规。 在版本上存储为几个月。 但是我不能添加vers.valid_for_months因为它抱怨ORA-00979: not a GROUP BY expression

我只想获取该行其余部分的内容。 我怎样才能做到这一点?

我认为这可以解决您的问题:

SELECT who.employee_id, course.course_id,
       MAX(add_months(sess.end_date, vers.valid_for_months))

那是最新的结束日期。 如果要最后一次会话的结束日期,请使用row_number()

SELECT employee_id, course_id, end_date
FROM (SELECT who.employee_id, course.course_id, sess.end_date,
             row_number() over (partition by who.employee_id, course.course_id
                                order by sess.end_date
                               ) as seqnum
      FROM employee_session_join esj
      JOIN training_session sess on sess.session_id = esj.session_id
      JOIN course_version vers on vers.version_id = sess.version_id
      JOIN course course on course.course_id = vers.course_id
      JOIN employee who on who.employee_id = esj.employee_id
      WHERE esj.active_flag = 'Y'
        AND sess.active_flag = 'Y'
        AND course.active_flag = 'Y'
        AND who.active_flag = 'Y'
        AND esj.approval_status = 5 -- successfully passed
) e
WHERE seqnum = 1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM