3

データベースに次のフィールドを持つ EMP テーブルがあります。

id,name,post,joining_date.

従業員の指定が変更されるたびに、新しい指定で新しい行が挿入されます。従業員が昇進した場合、その従業員には複数の行があることを意味します。今、私は各従業員の賢明な終了日の指定を取得したい.私の日付が次のようなものである場合のように:

id        name          start_date     post
1          x             24-JAN-05      Software Engineer
2          y             23-JAN-08      Associate Software Engineer
3          x             26-Aug-05      Senior Sofware Engineer
4          y             20-FEB-09      Sofware Engineer

次の形式のデータが必要です。

id        name          start_date     end_date        post
1          x             24-JAN-05      26-Aug-05      Software Engineer
2          x             26-Aug-05      null           Senior Software Engineer
3          y             23-JAN-08      20-FEB-09       Associate Software Engineer
4          y             20-FEB-09       null           Software Engineer

だから私は、各従業員の各指定の終了日のデータを取得したいと考えています。PL/SQL を使用したくありません。クエリのみを使用したいのですが、それが理にかなっていることを願っています。

4

2 に答える 2

4

どうぞ:

select id, name, start_date, lead(start_date) over (partition by name
order by start_date) as end_date, post from emp;
于 2012-05-27T15:56:09.687 に答える
3

LEADこれには分析関数を使用できます

SELECT id,
       name,
       start_date,
       LEAD(start_date) over (partition by name
                                  order by start_date) end_date,
       post
  FROM emp

ただし、おそらく、実際のテーブルには、を使用してどの行が一緒になるかを判断するEMPLOYEE_IDのではなく、 を使用できる何らかの種類の があります。NAMEそうしないと、「John Smith」という名前の従業員が 2 人いるとすぐに、問題が発生します。

于 2012-05-27T15:57:08.140 に答える