AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.11.2011, 11:50   #18  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,716 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Borsugg Посмотреть сообщение
А если не затруднит, можно поподробнее, что под нужными индексами подразумеваете?
Не обязательно пытаться все впихнуть в один запрос. В смысле, получить сразу результат. Может быть проще будет анализировать выборку. Ведь вряд ли будет очень уж большое количество записей в истории изменения цен для одного артикула и склада.

X++:
FromDate fromDate = 05\01\2011;
ToDate toDate = 20\02\2011;
newPrice minNewPrice = maxInt();
;

while select NewPrice, TransDate
	from RetailItemPriceHistory
	order by TransDate desc
	where RetailItemPriceHistory.ItemId            ==  itemId
		&& RetailItemPriceHistory.InventLocationId  ==  InventLocationId
		&& RetailItemPriceHistory.TransDate         <=  toDate
		&& RetailItemPriceHistory.NewPrice
{
	minNewPrice = min(minNewPrice, RetailItemPriceHistory.NewPrice);
	// Сравнение с начальной датой ПОСЛЕ вычисления значения
	// чтобы учесть цену, указанную ДО начальной даты
	if (RetailItemPriceHistory.TransDate <= fromDate)
	{
		break;
	}
}

if (minNewPrice == maxInt())
{
	// На дату окончания периода нет цены
	minNewPrice = 0;
}
Если же все-таки хочется все в одном запросе, то проблема заключается в том, что необходимо уточнить дату начала периода. Т.е. изменить начальную дату, если в истории есть запись с датой меньше указанной, но нет записи с датой равной указанной.

X++:
FromDate fromDate = 05\01\2011;
ToDate toDate = 20\02\2011;
;

// Уточняем "начальную дату"
select firstonly TransDate
from RetailItemPriceHistory
order by TransDate desc
where RetailItemPriceHistory.ItemId            ==  itemId
	&& RetailItemPriceHistory.InventLocationId  ==  InventLocationId
	&& RetailItemPriceHistory.TransDate         <=  fromDate 
	&& RetailItemPriceHistory.NewPrice;

// Если есть запись с датой меньше начальной и нет записи с датой
// равной начальной, то начальной датой считаем найденное значение
if (RetailItemPriceHistory.TransDate < fromDate)
{
	fromDate = RetailItemPriceHistory.TransDate;
}

// Теперь собственно запрос
select minOf(NewPrice) 
from RetailItemPriceHistory
where  RetailItemPriceHistory.ItemId            ==  itemId
	&& RetailItemPriceHistory.InventLocationId  ==  InventLocationId
	&& RetailItemPriceHistory.TransDate         >=  fromDate
	&& RetailItemPriceHistory.TransDate         <=  toDate
	&& RetailItemPriceHistory.NewPrice;
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Borsugg (1).
Теги
retailitempricehistory, запрос (query)

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Поиск набором в выпадающем списке.. propeller DAX: Программирование 0 04.04.2011 17:31
Поиск сотрудников по наименованию (ФИО) в AX 2009 propeller DAX: Программирование 12 15.11.2010 12:42
"поиск" braathe DAX: Программирование 6 24.03.2006 13:07
Поиск по подстроке JohNick DAX: Программирование 8 06.03.2004 22:24
Поиск по полю временной таблицы Swetik DAX: Программирование 2 10.12.2003 11:35

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:53.