2011-09-20 4 views
2

오라클 환경에서 운이 좋지 않은 다른 쿼리를 사용해보십시오. 사건을 단순화하기 위해, 우리는 그래서, 제품에 대한 가격은 다음 doc_date까지 또는 무한대로 doc_date에서 문서에 의해 설정이데이터를 언 롤링하는 선택을 수행해야합니다.

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로 리셋합니다. 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

대단히 감사합니다. 솔루션이 원하는대로 작동합니다. –

관련 문제