从具有max(column1)的行打印column2,而不在group by子句中包含column2

时间:2018-02-21 09:45:25

标签: oracle group-by max aggregate-functions

我知道这是一个愚蠢的问题,可能已经在某个地方得到了解答,如果有,请引导我链接。

我想打印一个未包含在group by子句中的列。 Oracle表示它应该包含在group by表达式中,但我希望value来自同一行,其中选择了另一列的max()值。

例如:如果我有一个包含以下列的表:

  

Employee_Name,Action_code,Action_Name

我想查看每个员工的最大action_code的操作名称,我也不能在条件中使用子查询。

我想要这样的事情:

select employee_name, max(action_code), action_name --for max code
from emp_table
group by employee_name

select语句中的 action_name 导致问题,如果我在group by子句中添加action_name,那么它将显示每个员工的每个操作的操作名称,这将使查询无意义。

感谢您的支持

1 个答案:

答案 0 :(得分:1)

您可以使用keep .. last pattern

select employee_name,
  max(action_code) as action_code,
  max(action_name) keep (dense_rank last order by action_code) as action_name
from emp_table
group by employee_name

文档在姐妹函数first()下更全面地解释了这一点。