Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
yamilramilev
265 / 257 / 46
Регистрация: 08.10.2009
Сообщений: 554
1

Странное поведение First

03.12.2012, 23:04. Просмотров 1304. Ответов 6
Метки нет (Все метки)

Приветствую всех! Есть такая выборка из основной таблицы:
SQL
1
2
3
SELECT Поставки.Код_товара, Поставки.Срок_поставки, Поставки.Стоимость_единицы
FROM Поставки
ORDER BY Поставки.Срок_поставки;
Странное поведение First

которая сортирована по дате.
Далее из полученной таблицы делаем следующую выборку:
SQL
1
2
3
4
5
SELECT T1.Код_товара, FIRST(T1.Стоимость_единицы) AS FirStoim, MAX(T1.Стоимость_единицы) AS MaxT1
FROM (SELECT Поставки.Код_товара, Поставки.Стоимость_единицы
         FROM Поставки   
         ORDER BY Поставки.Срок_поставки)  AS T1
GROUP BY T1.Код_товара;
Странное поведение First

Как я понимаю, тут из основной таблицы должен выбрать первую встретившуюся Среднюю_стоимость и максимальную по каждой группе. Но проблема в том, что First как то непонятно работает. Например, Код_товара = 4, FirStiom должен быть равен 27, т.к. его дата раньше, чем при стоимости 29, а дату мы сортировали в основной таблице. В чем может быть проблема в таком поведении функции First? В Access работаю несколько дней, поэтому для меня это дремучий лес.

Основной запрос должен быть таким:
• Вывести названия товаров, цены на которые никогда не повышались.
Вот и хотел найти по коду товара самую раннюю стоимость и максимальную, если максимальная больше первой то его откидываем. Работа ведется с таблице Поставки.
Странное поведение First
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2012, 23:04
Ответы с готовыми решениями:

Странное поведение запроса
Здравствуйте! Помогите разобраться с запросом. Дело в том,что в запросе...

Странное поведение при переходе по гиперссылке
не пойму, почему при переходе по гиперссылке на сайт результат не тот как если...

SQLIte странное поведение при вставке
Здравствуйте! Использую SQLIte, вместе с C#, и понадобилось мне в один...

Странное обновление подчиненной формы
Приветствую. Дело вот в чем, во вложении база, форма "призрак" - в свободные...

Странное задание, неужели ошибка?
Интересно, как это можно осуществить, если нету поля "стоимость"?

6
xeon13
20 / 33 / 1
Регистрация: 22.11.2012
Сообщений: 275
04.12.2012, 00:06 2
Ну вопервых код товара наверно уникален. Как же ты по нему собираешь сягруппировать? (GROUP BY T1.Код_товара
Во вторых: First/Last кроме случаев, когда запрос содержит предложение ORDER BY, эти функции возвращают случайные записи.
В третих: MAX обычно так не приименяют. При помощи функций Min и Max можно определить наименьшее и наибольшее значение поля на основе заданных условий выборки или группировки.
В четвёртых почему ты думаешь что у тебя в каком-то месте будет искать среднюю стоимость когда Среднее значение это Avg , является средним арифметическим (сумма значений деленная на их число). (Операндом в выражении может быть имя таблицы, константа или функция (встроенная или определяемая пользователем, но не статистическая функция SQL)

Хотел я тебе помочь но совсем запутался что именно тебе нужно. В данном примере ты пытаешься сложить рога с копытами.

Допускаю что я могу быть неправым. я пока ещё начинающий акцессовец )
1
minob
3532 / 1106 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
04.12.2012, 00:06 3
Цитата Сообщение от yamilramilev
Странное поведение First
Когда-то сталкивался с тем, что основной запрос обрабатывает записи подчиненного запроса не в том порядке, как указано в ORDER BY подчиненного. Выйти из ситуации помогло добавление предиката TOP 100 PERCENT в подчиненный запрос. Возможно и вам это поможет.
2
xeon13
20 / 33 / 1
Регистрация: 22.11.2012
Сообщений: 275
04.12.2012, 00:17 4
SQL
1
2
3
4
5
SELECT Таб1.ID, Таб1.НазваниеКод, Таб1.Дата
FROM Таб AS Таб1 INNER JOIN [SELECT Таб.НазваниеКод, MAX(Дата) AS maxdate
FROM Таб
GROUP BY Таб.НазваниеКод]. AS Таб2 ON (Таб1.НазваниеКод = Таб2.НазваниеКод) AND (Таб1.Дата = Таб2.maxdate)
ORDER BY Таб1.НазваниеКод;
Это всеголишь поиск максимальных записей групп товаров с одинаковымИ неуникальнымИ кодАмИ(названиЯмИ).
А среднее надо искать отдельным запросом.
1
yamilramilev
265 / 257 / 46
Регистрация: 08.10.2009
Сообщений: 554
04.12.2012, 22:45  [ТС] 5
Цитата Сообщение от xeon13 Посмотреть сообщение
Ну вопервых код товара наверно уникален
Не уникален, по таблице видно что один и тот же товар в разное время может стоить по разной цене.

Цитата Сообщение от xeon13 Посмотреть сообщение
Во вторых: First/Last кроме случаев, когда запрос содержит предложение ORDER BY, эти функции возвращают случайные записи.
Вроде понял как First работает: делается выборка, затем сортируется и и затем только берется первое значение, так?
Цитата Сообщение от xeon13 Посмотреть сообщение
При помощи функций Min и Max можно определить наименьшее и наибольшее значение поля на основе заданных условий группировки.
Так у меня группировка идет по Коду_товара и в каждой группе ищет максимальный.


Цитата Сообщение от xeon13 Посмотреть сообщение
В четвёртых почему ты думаешь что у тебя в каком-то месте будет искать среднюю стоимость когда Среднее значение это Avg
Приношу извинение за опечатку, хотел написать Стоимость_единицы, а не средняя стоимость.
minob, я уже понял ошибку в запросе. Не правильно использовал First.
xeon13, за последний запрос спасибо, нужно немного переделать по заданию.
А вообще смысл выборки: Вывести те товары, у которых самая первая цена максимальная (то есть цена не повышалась выше изначальной). Вот я и сортировал по дате, потом брал первую цену и максимальную и хотел их сравнить.
0
IRKIS
97 / 3 / 0
Регистрация: 19.09.2016
Сообщений: 36
03.10.2017, 15:24 6
Помогите, пожалуйста, создать выражение в столбце запроса.
Проблема такая. У меня больные.
Есть запрос по отделениям клиники. За период, например, с 1 по 7 октября.
В запросе, помимо всего остального, две графы "На начало периода" - сколько человек находилось в отделении 1 октября.
И "На конец периода" - сколько человек находится в отделении 7 октября.
Тоже использовала "На начало периода" функцию First, "На конец периода" соответственно Last.

Как прописать условие в запросе, чтобы выдавалось то, что надо?

В приложенной таблице это графа "на начало суток" и "на конец суток"
0
Миниатюры
Странное поведение First  
Capi
Модератор
Эксперт MS Access
1760 / 939 / 192
Регистрация: 12.06.2016
Сообщений: 2,076
03.10.2017, 16:02 7
IRKIS,

Зачем Вы пишете в старых чужих темах?
Создайте свою.
1
03.10.2017, 16:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2017, 16:02

Непонятное поведение VBA
коллеги, помогите разобраться прикладываю базу почему, если в функции...

Странное поведение if
в коде Select if CHARACTER_LENGTH(s.lname)=6 then s.lname||'...

БД, странное поведение
Привет Создаю источник данных из папки (скрин 1 и 2). Запускаю проект,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru