有人能帮我使用Oracle SQL获得预期的输出吗。下表为“;学生”;下表给出了数据?

有人能帮我使用Oracle SQL获得预期的输出吗。下表为“;学生”;下表给出了数据?,sql,oracle,plsql,Sql,Oracle,Plsql,字段: Student_ID, Department, Start_Date ex: 1,A, 2017-01-1 1,B, 2017-07-1 1,C, 2017-12-1 预期产出: Student_ID, Department, Start_Date, End_Date ex: 1,A, 2017-01-1, 2017-07-01 1,B, 2017-07-1,2017-12-01 1,C, 2017-12-1, ... End_

字段:

Student_ID, Department, Start_Date
   ex: 
    1,A, 2017-01-1

    1,B, 2017-07-1

    1,C, 2017-12-1
预期产出:

Student_ID, Department, Start_Date, End_Date

    ex:
 1,A, 2017-01-1, 2017-07-01

 1,B, 2017-07-1,2017-12-01

 1,C, 2017-12-1, ...
End_Date是学生ID下一条记录的开始日期

SELECT student_id,department_id, start_date,
  LEAD(start_date, 1) OVER (PARTITION BY student_id ORDER BY start_date) AS "End_Date" 
   FROM Your_Table

您可以如上所述使用Lead()函数

根据学生id和开始日期的顺序给出行号。并使用连接

查询

with cte as(
  select row_number() over(    
    partition by Student_ID
    order by Start_Date asc
   ) as rn, *
  from your_table_name
)
select t1.Student_ID, t1.Department, t1.Start_Date,
t2.Start_Date as end_date
from cte t1
left join cte t2
on t1.rn = t2.rn - 1
and t1.Student_Id = t2.Student_Id;

再添加一个join t1.Student\u ID=t2.Student\u ID.@FahadAnjum:是的。。补充。谢谢你,你的问题不可读。请您在问题中使用代码块,并修复问题主题中的标点符号,好吗?请在窗口中添加分区功能。此功能已关闭。您需要根据学生id进行分区,并且您需要在开始日期前订购,即:LEAD(开始日期,1)OVER(根据学生id按开始日期进行分区)谢谢Kapil和Britesponge