Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Расчет n-ного рабочеого дня с даты  [new]
Леша777
Guest
Нужно расчитать дату ожидаемой поставки заказа (дата размещения + дни на постаку, исключая выходные) :
DECLARE @Order -- описывет заказ
                       TABLE(
               		OrderId INT PRIMARY KEY  IDENTITY(1,1) --идентификатор закза 
               		,ProviderId INT NOT NULL   -- идентификатор поставщика 
               		,StoreId INT NOT NULL      -- идентификатор склада получателя 
               		,DaysToDelivery SMALLINT NOT NULL  -- кол-во дней на доставку 
               		,PlaceDate DATETIME NOT NULL  -- дата размещения заказа
		        )
					 
/*Cтандартная таблица-календарь для склада на каждый день 
столбцы StoreId, Date - первичный ключ и кластерный индекс 
*/					 
DECLARE @Calendar TABLE 

                          (					 
					        StoreId INT NOT NULL -- идентификатор склада
					       ,Date [datetime] NOT NULL -- дата 
					       ,WorkingFlag BIT NOT NULL -- признак раб/вых
					      )    
			
		
/*Cам запрос*/
			
SELECT 
       o.OrderId
      ,o.ProviderId
      ,o.StoreId
      ,o.DaysToDelivery
      ,(
      	 SELECT MAX(q.Date) 
         FROM 
			   (
       			 SELECT TOP (o.DaysToDelivery)
       											   c.Date
		       	 
       			 FROM @Calendar c
       			 WHERE c.StoreId  = o.StoreId
       			   AND
       				   c.Date >= o.PlaceDate
       			   AND
       				   c.WorkingFlag = 1    
	       			    
       			 ORDER BY c.Date ASC      
		       	
			   ) q
			   
      ) [ExpectedDate]
FROM @Order o 			

Можно как-нибудь оптимальнее находить эту дату, чем мой подзапрос ? Предварительно не расчитывая его при сохранении заказа.
Версия сервера 2005 sp2
27 май 09, 16:17    [7235676]     Ответить | Цитировать Сообщить модератору
 Re: Расчет n-ного рабочеого дня с даты  [new]

Guest
раз 2005 то спасет rownum() + over

хотя смысл тот же , только красиво всё завернуто.
27 май 09, 16:45    [7235908]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить