Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2013, 15:05   #1
Maxim360
Пользователь
 
Регистрация: 12.07.2013
Сообщений: 28
По умолчанию Запрос с выбором дат

Ребята, подскажите, пожалуйста, каким образом сделать запрос (или несколько запросов).

В Access есть табличка много миллионов строк (выгрузка из оракла идет через одно место и потом импортируется в access через файлы dbf, напрямую к ораклу подключиться через access нельзя).

Таблица содержит следующие инфо:
- код товара
- дата начала действия цены
- цена

Необходимо вытащить актуальную цену по позиции.

При этом по одной позиции может быть:
- несколько дат начала цен
- дата начала цены может начинаться в будущем, т.е. ее мы учитывать не должны.

Т.е. должно получиться что-то вроде этого
where Start_date <= date()

Первоначально запрос был написан таким образом (не знаю кто писал это)
minimum( if (Start_date >= maximum (Start_date)) then (Price) else NULL),
но очень долго вытягивается, т.к. идет пересчет, поэтому легче выгрузить массив и обработать его в access, если это вообще возможно.

Во вложении имитация акцессовской таблицы, чтобы было легче (в данной таблице согласно описанных мною требований актуальная запись будет в строке 3).
Буду очень благодарен за помощь.
Вложения
Тип файла: rar Base.rar (6.4 Кб, 14 просмотров)

Последний раз редактировалось Maxim360; 18.07.2013 в 15:12.
Maxim360 вне форума Ответить с цитированием
Старый 19.07.2013, 08:43   #2
Myhaylo
Форумчанин
 
Регистрация: 19.07.2012
Сообщений: 520
По умолчанию

1. После импорта файла dbf откройте таблицу в режиме конструктора и убедитесь, что поля с датами (START_DATE и DATE_END) имеют тип "Дата/время", а MAGAS, CODE и PRICE - числовое (для ускорения процесса желательно - целое или длинное целое).
2. Создайте подчинённый запрос ЗапросТовар_Дата:

SELECT ТаблицаЦен.MAGAS, ТаблицаЦен.CODE, Max(ТаблицаЦен.START_DATE) AS Max_START_DATE FROM ТаблицаЦен WHERE (((ТаблицаЦен.START_DATE)<=Date())) GROUP BY ТаблицаЦен.MAGAS, ТаблицаЦен.CODE;

3. Результирующий запрос:

SELECT ТаблицаЦен.MAGAS, ТаблицаЦен.CODE, ТаблицаЦен.PRICE FROM ЗапросТовар_Дата INNER JOIN ТаблицаЦен ON (ЗапросТовар_Дата.Max_START_DATE = ТаблицаЦен.START_DATE) AND (ЗапросТовар_Дата.CODE = ТаблицаЦен.CODE) AND (ЗапросТовар_Дата.MAGAS = ТаблицаЦен.MAGAS);
Окупант, руки прочь от Украины!!! Слава Героям!
Myhaylo вне форума Ответить с цитированием
Старый 19.07.2013, 09:14   #3
Maxim360
Пользователь
 
Регистрация: 12.07.2013
Сообщений: 28
По умолчанию

Большое спасибо, получилось!
Maxim360 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перекрестный запрос с условием дат из полей формы АННА-ЕАО Microsoft Office Access 15 20.06.2013 17:21
Высчитывание и подстановка нескольких дат в sql запрос HellFosa C# (си шарп) 2 19.11.2012 09:33
Sql запрос диапазона дат Maksimuz БД в Delphi 7 14.01.2011 23:31
Как добавить значения из списка с множественным выбором в таблицу/запрос? NickiBell Microsoft Office Access 0 24.09.2010 00:38
SQL запрос в MYSQL для интервала дат slips SQL, базы данных 7 05.06.2010 21:41