我的数据格式如下:
Date Quantity
-----------------------
1-Jan-2014 5
6-Jan-2014 15
10-Jan-2014 67
21-Jan-2014 42
我可以使用什么Oracle SQL来生成结果:
StartDate EndDate Quantity
----------------------------------
1-Jan-2014 5-Jan-2014 5
6-Jan-2014 9-Jan-2014 15
10-Jan-2014 20-Jan-2014 67
21-Jan-2014 null 67
我正在考虑使用RANK OVER PARTITION和针对R = R + 1的子查询的连接,然后为EndDate执行StartDate-1,但似乎无法使其工作。
答案 0 :(得分:1)
您可以使用LEAD函数获取下一行并从中减去一行。
select date as startdate,
lead(date) over (order by date) - 1 as enddate,
quantity
from table;
答案 1 :(得分:0)
试试这个并查看以下查询是否有效。
SELECT Left.Date "StartDate",
(right.Date - INTERVAL 1 DAY) "EndDate",
Left.Quantity
FROM
(
SELECT t1.Date,
t1.Quantity,
RANK() OVER (ORDER BY t1.DATE ASC) "rank"
FROM Table t1
) as Left
LEFT OUTER JOIN
(
SELECT t1.Date,
t1.Quantity,
RANK() OVER (ORDER BY t1.DATE ASC) "rank"
FROM Table t1
) as Right ON Left.rank = Right.rank - 1