从开始日期开始结束日期

时间:2012-05-27 15:22:27

标签: oracle

我的数据库中有一个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。我想只使用查询。我希望它有意义。

2 个答案:

答案 0 :(得分:5)

我们走了:

select id, name, start_date, lead(start_date) over (partition by name
order by start_date) as end_date, post from emp;

答案 1 :(得分: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”的员工,就会出现问题。