2011-09-20 18 views
2

請大家幫忙,在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 

因此,對於產品的價格是由文件從doc_date設置到明年doc_date或無窮記錄,如果沒有更多的文件,它設置了新的價格或將其重置爲空存在,null表示產品銷售從doc_date開始不可用。

我需要一個選擇的形式 「解開」 數據:

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 

謝謝!

回答

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 
+0

非常感謝您,您的解決方案按照需要工作! –