умный способ создать основной список (избегая перекрестных объединений) - PullRequest
0 голосов
/ 19 ноября 2018

Мне нужно создать таблицу даты, количества продуктов и инвентаря только для инвентарного количества дней 0, что-то вроде этого

Date Product store Inv
Jan1  1       1      0
Feb4  1       1      0

Из таблицы инвентаризации, в которой есть запись только при изменении инвентаря, как этот

 Store Product start_date end_date Inv
 1      1      Jan 4      Jan10    5
 1      1      Jan10      jan 15   4

Я знаю, что могу создать основную таблицу, перекрестно соединяя все дни магазина, продукта и календаря в году, а затем объединять только дни, когда дата попадает между датой начала и окончания таблицы инвентаризации.Есть ли лучший способ, чем этот?Можно ли избежать перекрестного соединения?Спасибо

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Создайте таблицу с датами (которую удобно иметь по разным причинам), затем оставьте соединение из таблицы инвентаризации и используйте BETWEEN против ваших столбцов дат.

0 голосов
/ 19 ноября 2018

Вы ищете lag():

select t.*
from (select t.*,
             lag(inventory) over (partition by product, store order by date) as prev_inventory
      from t
     ) t
where prev_inventory is null or prev_inventory <> inventory;
...