Показать сообщение отдельно
Старый 11.11.2011, 10:16   #12  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Теоретически может так оказаться, что вторая часть запроса не найдёт не одной записи (например период в которм ищем минимальную цену насчинается раньше чем первая запись о цене). И тогда джойн не вернёт ничего.
да, такое возможно... я думаю что можно это будет учесть. в начале выбрать с помощью джойна, если там ничего не нашлось, тогда получается что достаточно сделать один запрос с указанием периода. он и найдет минимальную цену. Т.е. в итоге метод получится что то типа:
X++:
....
Price    returnPrice;
;

select firstonly NewPrice from RetailItemPriceHistory
    order by NewPrice
    where  RetailItemPriceHistory.ItemId            ==  itemId
          && RetailItemPriceHistory.InventLocationId  ==  InventLocationId
          && RetailItemPriceHistory.TransDate         >=  "05.01.2011"
          && RetailItemPriceHistory.TransDate         <=  "20.02.2011"
          && RetailItemPriceHistory.NewPrice
join firstonly NewPrice from RetailItemPriceHistory2
    order by TransDate desc
    where  RetailItemPriceHistory2.ItemId                ==  RetailItemPriceHistory.ItemId
          && RetailItemPriceHistory2.InventLocationId  ==  RetailItemPriceHistory.InventLocationId
          && RetailItemPriceHistory2.TransDate           <    "05.01.2011";

if (RetailItemPriceHistory.RecId != 0)
    returnPrice = min(RetailItemPriceHistory.NewPrice, RetailItemPriceHistory2.NewPrice);
else
{
    select minOf(NewPrice) from RetailItemPriceHistory
                                where  RetailItemPriceHistory.ItemId            ==  itemId
                                    && RetailItemPriceHistory.InventLocationId  ==  InventLocationId
                                    && RetailItemPriceHistory.TransDate         >=  "05.01.2011"
                                    && RetailItemPriceHistory.TransDate         <=  "20.02.2011"
                                    && RetailItemPriceHistory.NewPrice;   

    returnPrice = RetailItemPriceHistory.NewPrice;
}

return returnPrice;
P.S. в общем конечно этот вариант надо обдумывать с тестированием (гонять на разных вариантах), тогда в итоге можно получить наиболее сбалансированный результат
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: Borsugg (1).