Необходимо выполнить выбор, который развертывает данные - PullRequest
2 голосов
/ 20 сентября 2011

, пожалуйста, помогите, пробовал разные запросы без удачи в среде 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 или на бесконечность, если больше не существует документа, который устанавливает новую цену или сбрасывает ее на ноль, ноль означает, что продажи продукта недоступны, начиная с 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

Спасибо!

1 Ответ

2 голосов
/ 20 сентября 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...