2017-11-17 24 views
0

従業員の各ポジションの開始日と終了日を含む1つの行に1つのSQLクエリを出力する必要があります。従業員履歴テーブルから各ポジションの従業員の開始日と終了日を取得します

現在のテーブルの構造は次のとおりです。

| EMP_ID | SYST_LOGIN | TEAM | POSITION | LOCATION | START_DATE | END_DATE | 
|--------|------------|------|----------|----------|------------|----------| 
| 123456 | FNAM.LNAM | A | POS1  | LOC1  | 01-JAN-17 | 31-JAN-17| 
| 123456 | FNAM.LNAM | A | POS1  | LOC2  | 01-FEB-17 | 15-FEB-17| 
| 123456 | FNAM.LNAM | B | POS1  | LOC2  | 16-FEB-17 | 15-MAR-17| 
| 123465 | FNAM.LNAM | C | POS2  | LOC2  | 16-MAR-17 | NULL  | 

私はあることを置くアウトが必要です

| EMP_ID | SYST_LOGIN | POSITION | LOCATION | START_DATE | END_DATE | 
|--------|------------|----------|----------|------------|-----------| 
| 123456 | FNAM.LNAM | POS1  | LOC2  | 01-JAN-17 | 15-MAR-17 | 
| 123465 | FNAM.LNAM | POS2  | LOC2  | 16-MAR-17 | NULL  | 

新しい従業員テーブルが構築されたとのビジネスは、従業員へのすべての変更を作成することを要求されています新しい場所を更新するだけのテーブルには新しいレコードがあります。だから私は従業員の位置を見て、開始日と終了日を知りたい。ご協力ありがとうございました。

下記のゴードン・リノフ氏の質問がこれに当てはまりました。

私は彼が下記たゴードン・リノフのクエリを使用して

| EMP_ID | SYST_LOGIN | TEAM | POSITION | LOCATION | START_DATE | END_DATE | 
|--------|------------|------|----------|----------|------------|----------| 
| 123456 | FNAM.LNAM | A | POS1  | LOC1  | 01-JAN-17 | 31-JAN-17| 
| 123456 | FNAM.LNAM | A | POS1  | LOC2  | 01-FEB-17 | 15-FEB-17| 
| 123456 | FNAM.LNAM | B | POS1  | LOC2  | 16-FEB-17 | NULL  | 

****に走った****更新された第2のシナリオ:

EMP_ID、SYST_LOGIN、POSITION、LOCATION、 分(選択

:START_DATE)これを使用してEMP_ID、SYST_LOGINによって グループトンからEND_DATE 、POSITION、LOCATION

としてSTART_DATE、最大(END_DATE)として、私は次のような結果を得ます

| EMP_ID | SYST_LOGIN | POSITION | LOCATION | START_DATE | END_DATE | 
|--------|------------|----------|----------|------------|-----------| 
| 123456 | FNAM.LNAM | POS1  | LOC2  | 01-JAN-17 | 15-FEB-17 | 

従業員がまだアクティブであるため、最後のレコードのEND_DATEはNULLで、max(END_DATE)使用時には使用されません。ギャップがないと仮定すると、

+0

あなたがこれまで持っているSQLコードを表示するためにあなたの質問を編集してください。 –

+0

新しいケースを処理するために、 'coalesce(END_DATE、DATE '9999-12-31)'をGordonのクエリに追加することができます。 – zarruq

答えて

0

が、これは単なる集合体である:

select EMP_ID, SYST_LOGIN, POSITION, LOCATION, 
     min(start_date) as start_date, max(end_date) as end_date 
from t 
group by EMP_ID, SYST_LOGIN, POSITION, LOCATION; 
+0

あなたは間違いなく、重複がないと仮定すると、これはうまくいきます。私はあなたがそれを見ることができるなら、これがうまくいかず、上にそれを加えたもう一つのシナリオを持っています。お返事ありがとうございます!それは有り難いです。 –

関連する問題