ROW_NUMBER

ROW_NUMBER は、1 から始まる ORDER BY 句で指定された行の順序付けられた順序で、適用される各行 (パーティション内の各行またはクエリによって返される各行のいずれか) に一意の番号を割り当てます。

構文

ROW_NUMBER () OVER ( [ PARTITION BY expression [, ...] ]
  ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ) 

備考

PARTITION BY はオプションです。
ORDER BY は必要です。
window 句は使用できません。
ROW_NUMBER がサブクエリに表示される場合、その動作は Oracle ROWNUM 関数と同じではない可能性があります。

各マネージャーの従業員に雇用日で番号を付けたいとします。次のようなクエリを使用します。

SELECT
ROW_NUMBER () OVER (PARTITION BY manager ORDER BY hire_date) 
FROM EMPLOYEES

このクエリは、最初にマネージャーごとに従業員をパーティション化し、次に各パーティションの従業員を雇用日ごとに並べ替えてから、ROW_NUMBER 関数を適用します。ただし、同じ日に複数の従業員が雇用されている可能性があるため、このクエリを繰り返し実行すると、同じ日の従業員の順序が異なる可能性があります。返された順序に一貫性があることを確認するには、2番目の式を ORDER BY 句に追加します。

SELECT 
ROW_NUMBER () OVER (PARTITION BY manager ORDER BY hire_date, ID) 
FROM EMPLOYEES