0

給与の増加履歴(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

クエリで実行したいことの擬似コード:

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

私が試したこと(inc_date同じものが重複する場合にサブクエリを使用したくありませんでしたemp_id

SELECT epi.inc_amt
  FROM emp_pay_inc epi
 WHERE ROWNUM = 1 
 ORDER BY epi.inc_date

しかし、これはうまくいきません。inc_amount2002 年 1 月 1 日の場合は0 を返しますinc_date。どうやらOracleはROWNUM、クエリによって返されたデータセットではなく、元のテーブルに表示されるとおりに保存します。

4

5 に答える 5

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;
于 2013-07-31T16:21:05.033 に答える