有人能帮我使用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