仅使用ORDER BY检索第一行

Zzz*_*Zzz 0 sql oracle

我有一个包含工资增长历史(Oracle)的表emp_id- 用于员工识别,inc_date- 工资变更的日期和inc_amount - 工资变化的金额.我想得到inc_amount最后一个inc_date.

 emp_pay_inc:



==============================
emp_id | inc_date | inc_amount
==============================
625    | 1/1/2002 | 0
625    | 5/6/2003 | 12000
625    | 1/7/2004 | 35000
625    | 8/1/2009 | -5000
Run Code Online (Sandbox Code Playgroud)

我想要查询的伪代码:

SELECT epi.inc_amt
  FROM emp_pay_inc epi
 WHERE epi.inc_date = MAX(epi.inc_date) -- I know this won't work, it is just for illustration
Run Code Online (Sandbox Code Playgroud)

我尝试了什么(我不想在副本inc_date相同的情况下使用子查询emp_id:

SELECT epi.inc_amt
  FROM emp_pay_inc epi
 WHERE ROWNUM = 1 
 ORDER BY epi.inc_date
Run Code Online (Sandbox Code Playgroud)

但这不起作用.它inc_amountinc_date1/1/2002 返回0 .显然,Oracle会将ROWNUM它们显示在原始表中,而不是查询返回的数据集.

Noe*_*oel 5

我猜你想要每个员工这个.

SELECT emp_id, inc_date, inc_amount
  FROM (SELECT emp_id,
               inc_date,
               inc_amount,
               ROW_NUMBER ()
                  OVER (PARTITION BY emp_id ORDER BY inc_date DESC)
                  r
          FROM emp_pay_inc)
 WHERE r = 1;
Run Code Online (Sandbox Code Playgroud)