|
![]() |
#1 |
Ищущий знания...
|
можно сделать одним запросом
![]() X++: 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"; return min(RetailItemPriceHistory.NewPrice, RetailItemPriceHistory2.NewPrice);
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#2 |
Участник
|
|
|
![]() |
#3 |
Ищущий знания...
|
Цитата:
![]() ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#4 |
Участник
|
Теоретически может так оказаться, что одна из частей запроса не найдёт не одной записи (например период в которм ищем минимальную цену начинается раньше чем первая запись о цене). И тогда джойн не вернёт ничего.
В случае с двумя запросами, перед тем как искать минимум среди двух результатов нужно принудительно проверить что результаты не пусты. Последний раз редактировалось S.Kuskov; 11.11.2011 в 10:14. |
|
![]() |
#5 |
Ищущий знания...
|
Цитата:
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; ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: Borsugg (1). |
![]() |
#6 |
Участник
|
Цитата:
Сообщение от lev
![]() да, такое возможно... я думаю что можно это будет учесть. в начале выбрать с помощью джойна, если там ничего не нашлось, тогда получается что достаточно сделать один запрос с указанием периода. он и найдет минимальную цену. Т.е. в итоге метод получится что то типа:
X++: .... .... 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; ![]() Последний раз редактировалось Borsugg; 11.11.2011 в 10:29. |
|
![]() |
#7 |
Участник
|
Цитата:
![]() |
|
![]() |
#8 |
Ищущий знания...
|
Цитата:
![]() ![]() ![]() Цитата:
Сообщение от Borsugg
А если RetailItemPriceHistory.RecId и так ничего не вернул в первом запросе с join'ом, то скорее же всего и второй запрос тоже ничего не вернет? Условия выборки то одинаковые...
второй запрос вернет если в заданном периоде есть записи. это разные выборки.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#9 |
Участник
|
|
|
Теги |
retailitempricehistory, запрос (query) |
|
![]() |
||||
Тема | Ответов | |||
Поиск набором в выпадающем списке.. | 0 | |||
Поиск сотрудников по наименованию (ФИО) в AX 2009 | 12 | |||
"поиск" | 6 | |||
Поиск по подстроке | 8 | |||
Поиск по полю временной таблицы | 2 |
|