11.11.2011, 09:11 | #1 |
Участник
|
Правильный поиск в истории цен
Доброе утро!
Возникла такая проблема. Есть таблица История цен (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; А правильная цена за этот период является 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-й способ: Прикрутить таблицу с датами к истории и после найти мин.цену (В SQL вижу как сделать, а в аскапте пока думаю..) Спасибо! |
|
Теги |
retailitempricehistory, запрос (query) |
|
Похожие темы | ||||
Тема | Ответов | |||
Поиск набором в выпадающем списке.. | 0 | |||
Поиск сотрудников по наименованию (ФИО) в AX 2009 | 12 | |||
"поиск" | 6 | |||
Поиск по подстроке | 8 | |||
Поиск по полю временной таблицы | 2 |
|