我正在尝试这样显示数据:
在我们的数据库中,我们有事件(具有唯一ID),然后是开始日期。这些事件不会重叠,并且每个事件都在最后一个事件结束的日期开始。但是,数据库中没有“结束日期”。
我必须将数据输入另一个系统,以便它显示事件ID,开始日期和结束日期(仅是下一个开始日期)。
我想避免创建自定义视图,因为在此数据库中确实对此不满意。所以我想知道是否有一个很好的方法可以在查询中执行此操作。
基本上应该是:
EventA |日期1 |日期2
活动B |日期2 |日期3
EventC |日期3 | Date4
这些活动是提前几年计划的,我只需要在接下来的几个月中进行查询,因此不必担心用完“下一个事件开始日期”的情况,如果需要,此查询将是网络服务调用。
事件和日期的基本伪代码为:
select Event.ID, Event.StartDate
from Event
where Event.StartDate > sysdate and Event.StartDate < sysdate+90
基本上,我想获取下一行的Event.StartDate并将其作为当前行的Event.EndDate
答案 0 :(得分:0)
使用LEAD
分析函数:
Oracle设置:
具有10行的表:
CREATE TABLE Event ( ID, StartDate ) AS
SELECT LEVEL, TRUNC( SYSDATE ) + LEVEL
FROM DUAL
CONNECT BY LEVEL <= 10;
查询:
select ID,
StartDate,
LEAD( StartDate ) OVER ( ORDER BY StartDate ) AS EndDate
from Event
where StartDate > sysdate and StartDate < sysdate+90
输出:
ID | STARTDATE | ENDDATE -: | :-------- | :-------- 1 | 22-JUN-19 | 23-JUN-19 2 | 23-JUN-19 | 24-JUN-19 3 | 24-JUN-19 | 25-JUN-19 4 | 25-JUN-19 | 26-JUN-19 5 | 26-JUN-19 | 27-JUN-19 6 | 27-JUN-19 | 28-JUN-19 7 | 28-JUN-19 | 29-JUN-19 8 | 29-JUN-19 | 30-JUN-19 9 | 30-JUN-19 | 01-JUL-19 10 | 01-JUL-19 | null
db <>提琴here