Цитата:
Сообщение от
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. в общем конечно этот вариант надо обдумывать с тестированием (гонять на разных вариантах), тогда в итоге можно получить наиболее сбалансированный результат