Oracle:将数据转换为日期范围

时间:2014-06-05 16:51:41

标签: sql oracle

我的数据格式如下:

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,但似乎无法使其工作。

2 个答案:

答案 0 :(得分:1)

您可以使用LEAD函数获取下一行并从中减去一行。

select date as startdate,
       lead(date) over (order by date) - 1 as enddate,
       quantity
  from table;

SQLFiddle

答案 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