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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.11.2011, 09:11   #1  
Borsugg is offline
Borsugg
Участник
 
22 / 10 (1) +
Регистрация: 09.08.2011
Lightbulb Правильный поиск в истории цен
Доброе утро!

Возникла такая проблема.
Есть таблица История цен (RetailItemPriceHistory), в которой записывается розничная цена при каждом ее изменении. То есть история ведется не на каждый день, а только на те дни, когда произошло изменение цены. И вот возникает проблема поиска вот этой цены по определенной выборке.
Пример: допустим надо найти минимальную цену за период с 05.01.2011 по 20.02.2011 по конкретному товару.
В таблице есть только 3 строки с разными датами по этому артикулу (есть еще склад, но его опустим):
itemid transdate price
000001 01.01.2011 100
000001 07.01.2011 110
000001 15.02.2011 105

Делаем выборку таким образом:
X++:
select minOf(NewPrice) from RetailItemPriceHistory
                                where  RetailItemPriceHistory.ItemId            ==  itemId
                                    && RetailItemPriceHistory.InventLocationId  ==  InventLocationId
                                    && RetailItemPriceHistory.TransDate         >=  "05.01.2011"
                                    && RetailItemPriceHistory.TransDate         <=  "20.02.2011"
                                    && RetailItemPriceHistory.NewPrice;
Этот запрос вернет нам цену 105.
А правильная цена за этот период является 100, т.к. период указан начиная с 05.01.2011 и цена действовала в тот момент получается с 01.01.2011 по 07.01.2011 равной 100.

Подскажите как учесть эту цену?
У меня возникли 2 идеи по поводу решения этой задачи:
1. Написать метод, кот. будет возвращать мин. цену следующим образом:

Первый запрос будет таким, который представлен выше (Находим 1-ю мин.цену).

Второй запрос:
X++:
select firstonly RetailItemPriceHistory
                               order by RecId
                                where  RetailItemPriceHistory.ItemId            ==  itemId
                                    && RetailItemPriceHistory.InventLocationId  ==  InventLocationId
                                    && RetailItemPriceHistory.TransDate         >=  "05.01.2011"
                                    && RetailItemPriceHistory.TransDate         <=  "20.02.2011"
                                    && RetailItemPriceHistory.NewPrice;
Находим первую строку в истории по заданным условиям. То есть вот эту строку:
itemid transdate price
000001 07.01.2011 110

Третий запрос:
Находим 2-ю минимальную цену след.образом:
X++:
select firstonly RetailItemPriceHistory2
                                order by RecId
                                where  RetailItemPriceHistory2.ItemId            == RetailItemPriceHistory itemId
                                    && RetailItemPriceHistory2.InventLocationId  ==  RetailItemPriceHistory.InventLocationId
                                    && RetailItemPriceHistory2.RecId <  RetailItemPriceHistory.RecId
                                    && RetailItemPriceHistory2.NewPrice;
И потом уже сравниваем эти 2 получившиеся цены на мин.
Выглядит уже очень коряво, посему и пишу вам =)
(Знаю что с датами запросы не отработают, поставил для наглядности)

2-й способ:
Прикрутить таблицу с датами к истории и после найти мин.цену (В SQL вижу как сделать, а в аскапте пока думаю..)

Спасибо!
Теги
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, время: 16:28.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.