需要执行展开数据的选择

时间:2011-09-20 12:56:00

标签: 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

因此,如果没有更多设置新价格的文档或将其重置为null,则产品的价格由doc_date中的文档设置为下一个doc_date或无穷大,null表示从doc_date开始无法获得产品销售。 / p>

我需要一个选择,以“展开”形式的数据:

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

谢谢!

1 个答案:

答案 0 :(得分:2)

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