Учитывая следующую таблицу и данные.Даты и времени с SQL
create table prices
(productKey int
,PriceType char(10)
,BeginDate date
,EndDate date
,price decimal(18,2))
insert into prices(productKey, PriceType,BeginDate,EndDate, price)
values
(1,'LIST','1-1-2010','1-15-2010',10),
(1,'LIST','1-16-2010','10-15-2010',20),
(1,'DISCOUNT','1-10-2010','1-15-2010',-5),
(2,'LIST','2-1-2010','10-15-2010',30),
(2,'LIST','10-16-2010','1-1-9999',35),
(2,'DISCOUNT','2-10-2010','10-25-2010',-10),
(2,'LIST','1-1-2010','1-15-2010',10),
(3,'DISCOUNT','1-12-2010','1-1-9999',-5),
(3,'LIST','1-16-2010','1-1-9999',10)
Мне нужно вставить записи в ту же таблицу, которая вычисляет фактическую цену (скидка-список) за каждый период времени.
например. для продукта 1, я должен иметь следующие «Actual» записи
Begin End Price
1-1-2010 1-9-2010 10
1-10-2010 1-15-2010 5
1-16-2010 10-15-2010 20
я вроде есть разобрался для чего, где скидка начинается в пролете список цен, но я в растерянности что-нибудь еще.
Спасибо за помощь
EDIT
Там может быть несколько скидок на ProductKey, но периоды скидки не будут пересекаться. Таким образом, у вас может быть один на 2010 год, а другой на 2012 год, но не на 2010 год.
Кроме того, если кто-то может придумать лучший заголовок, сделайте это. На данный момент мой плохой мозг полностью оспаривается.
EDIT2
Это SQL сервер 2008R2. Мне понравился бы прекрасный ответ на основе набора (или кто-то, кто дал бы мне начало в этом направлении), но он будет так же доволен решением курсора, которое работает.
Не могу сказать, насколько мне не нравится видеть «вызов» в названии. – Oded
@Oded Задача состоит в том, что это должно быть сделано в пятьдесят символов или меньше. –
Откуда «1-9-2010»? –