Sql 需要执行展开数据的选择

Sql 需要执行展开数据的选择,sql,oracle,Sql,Oracle,请帮助,在Oracle环境中尝试了不同的查询,但没有成功。为了简化这个例子,假设我们有一个表,其中有这样的记录 doc_id doc_date product_id price 1 01.01.2011 1 20.3 1 01.01.2011 2 10.0 2 15.01.2011 3 10.3 2 15.01.2011 2 null 因此,从单据日期到下一个单据日期,

请帮助,在Oracle环境中尝试了不同的查询,但没有成功。为了简化这个例子,假设我们有一个表,其中有这样的记录

doc_id   doc_date  product_id price
1       01.01.2011    1       20.3
1       01.01.2011    2       10.0
2       15.01.2011    3       10.3
2       15.01.2011    2       null
因此,从单据日期到下一个单据日期,产品的价格由单据设置,如果没有更多的单据设置新的价格或将其重置为空,则为空表示从单据日期开始,产品销售不可用

我需要一个select,用于“展开”表单中的数据:

doc_id   from_date   to_date    product_id price
1        01.01.2011  null          1        20.3
1        01.01.2011  14.01.2011    2        10.0
2        15.01.2011  null          2        null
2        15.01.2011  null          3        10.3
甚至:

doc_id   from_date   to_date    product_id price
1        01.01.2011  14.01.2011    1        20.3
1        01.01.2011  14.01.2011    2        10.0
2        15.01.2011  null          2        null
2        15.01.2011  null          3        10.3
any      15.01.2011  null          1        20.3
谢谢

Select 
  doc_id, 
  doc_date as from_date,
  (lead(doc_date) over (partition by product_id order by doc_date) ) - 1  as to_date,
  product_id, 
  price
from
  product_table