Как произвести вставку данных в таблицу на основе каждой из строк в PL SQL

У меня есть SQL запрос, который собирает необходимый мне набор данных в виде

  1. product_id
  2. product_name
  3. vendor_price (берется напряму из БД)
  4. new_price (высчитываю на ходу рандомно;vendor_price*DBMS_RANDOM.VALUE(1,2))
  5. vendor_id
  6. vendor_name
  7. date

Если обо всем коротко - выбираю продукт, вендора и цену закупки в определенную дату. Как вы понимаете, закупки бывают не каждый день, между закупками есть промежутки в разное количество дней.

Что нужно мне? Мне нужно, чтобы для каждого товара существовала запись о закупке в рамках минимального и максимального дня закупки этого товара (данные нужны для тестирования).

У меня встал вопрос о реализации. Не совсем понимаю, как это сделать, но набор данных у меня уже есть и то хорошо. Пока что я пришел к этому:

  1. Считать текущую строку
  2. Если она совпадает со следующей строкой по id_товара,то сравниваем дату
  3. Мы должны получить дапазон дат между этими датами
  4. Вставка всех тех же значений, что в 1 строке, кроме цены (новой, она так и остается рандомной) и даты (но дата ставится по порядку)

Дальше нужно перейти к следующей строке и так до конца ...

Буду рад услышать идеи и советы. Спасибо! data set


Ответы (1 шт):

Автор решения: letronas

Спасибо всем за комментарии. Поясню, что я сделал:

  1. Создал календарь (отдельной таблицей)
  2. Приджойнил Свои данные к нему по тому условию, которое было необходимо, чтобы данные размножились, как мне надо ( INNER JOIN CALENDAR_D ON CALENDAR_D.calendar_date >= final_data.date_from and CALENDAR_D.calendar_date <=final_data.date_to).
  3. Так как мне нужно было, чтобы настоящая запись не менялась (в плане цены), я прописал условие CASE WHEN calendar_date = date_from THEN avg_income_vendor_price ELSE ROUND(avg_income_vendor_price*DBMS_RANDOM.VALUE (1.1 ,2), 2) END as price_new. Вопрос можно закрывать.

P.S. Отдельно спасибо @Akina за пример. Натолкнуло на правильные мысли в том числе.

P.P.S. К сожалению, больше данных не могу предоставить, но надеюсь, кому-то в будущем поможет такое решение.

→ Ссылка