我的数据库中有一个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。我想只使用查询。我希望它有意义。
答案 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”的员工,就会出现问题。