У меня есть таблица изменений цен на товары, и я хочу использовать ее для создания таблицы цен на товары для каждой даты (между датами начала и окончания товара).
Вот код для создания даты: -
declare @Item table (item_id int, item_launch_date date, item_end_date date);
insert into @Item Values (1,'2001-01-01','2016-01-01'), (2,'2001-01-01','2016-01-01')
declare @ItemPriceChanges table (item_id int, item_price money, my_date date);
INSERT INTO @ItemPriceChanges VALUES (1, 123.45, '2001-01-01'), (1, 345.34, '2001-01-03'), (2, 34.34, '2001-01-01'), (2,23.56 , '2005-01-01'), (2, 56.45, '2016-05-01'), (2, 45.45, '2017-05-01'); ;
Я бы хотел увидеть что-то вроде этого: -
item_id date price
------- ---- -----
1 2001-01-01 123.45
1 2001-01-02 123.45
1 2001-01-03 345.34
1 2001-01-04 345.34
etc.
2 2001-01-01 34.34
2 2001-01-02 34.34
etc.
Есть предложения по написанию запроса?
Я использую SQL Server 2016.
Добавлено:
У меня также есть таблица календаря под названием "dim_calendar" с одной строкой в день. Я надеялся использовать оконную функцию, но самое близкое, что я могу найти - это lead (), и он не выполняет то, что, как я думал, будет: -
select
i.item_id,
c.day_date,
ipc.item_price as item_price_change,
lead(item_price,1,NULL) over (partition by i.item_id ORDER BY c.day_date) as item_price
from dim_calendar c
inner join @Item i
on c.day_date between i.item_launch_date and i.item_end_date
left join @ItemPriceChanges ipc
on i.item_id=ipc.item_id
and ipc.my_date=c.day_date
order by
i.item_id,
c.day_date;
Спасибо