首页 文章

从员工历史记录表中获取每个职位的员工开始和结束日期

提问于
浏览
0

我需要在一个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      |

构建了新的员工表,并要求业务对员工的所有更改在表中创建新记录,而不是仅更新新位置 . 所以现在我想看一下员工职位并知道开始日期和结束日期 . 谢谢您的帮助 .

Gordon Linoff的查询对此有用 .

更新了我遇到的第二个场景

| 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     |

使用Gordon Linoff的查询,他给出了以下内容:

选择EMP_ID,SYST_LOGIN,POSITION,LOCATION,min(start_date)作为start_date,max(end_date)作为end_date从t组通过EMP_ID,SYST_LOGIN,POSITION,LOCATION

使用这个我得到以下结果:

| 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)时不会使用 .

1 回答

  • 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;
    

相关问题