powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Почему не работает запрос
17 сообщений из 17, страница 1 из 1
Почему не работает запрос
    #33252925
canya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В командном окне набираю этот запрос и выдается ошибка SQL:GROUP BY clause is missing or invalid

Код: plaintext
SELECT  tax_id, factory_id, region_id, period_id, MAX(raschet_id) FROM tax Group BY factory_id, region_id, period_id

если tax_id убрать тогда работает, но мне надо знать какой номер у этой записи.
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33252926
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитай внимательно про Set EngineBehavior.
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33252943
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
canyaВ командном окне набираю этот запрос и выдается ошибка SQL:GROUP BY clause is missing or invalid

Код: plaintext
SELECT  tax_id, factory_id, region_id, period_id, MAX(raschet_id) FROM tax Group BY factory_id, region_id, period_id

если tax_id убрать тогда работает, но мне надо знать какой номер у этой записи.
Как раз tax_id и надо убрать. Здесь идет запрос и какие tax_id в таблице tax имели место быть тут нипричем.
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33252964
canya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Владимир СА

Как ни причем, а если я хочу получить номер записи у которой максимальное значение поля raschet_id в комбинации 3 полей region_id, period_id, factory_id.

2проходящий

Спасибо. поставил 70 заработало. Только не пойму зачем это все нужно.
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33252973
denis_viktorovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Переменная tax_id отсутствует в списке group by.
Если по ключу factory_id, region_id, period_id есть несколько tax_id
то какой из них отображать?
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33252980
canya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
for denis_viktorovich

По идее это уникальная комибнация, но пусть будет первая попавшаяся
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33252984
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi, canya !
Действительно все работает при
Код: plaintext
1.
2.
3.
4.
SET ENGINEBEHAVIOR  70 
SELECT tax_id, factory_id, region_id, period_id, MAX(raschet_id) ;
   FROM tax ;
   Group BY factory_id, region_id, period_id ;
   INTO CURSOR Cur_tax
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33253003
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласна стандарта ANSI SQL-92, при использовании GROUP BY... в SELECT... вы можете в списке полей использовать ТОЛЬКО поля с агрегатными функциями и поля, по которым выполняется группировка. Если вы подумаете над этим, то поймете, что только такой вариант имеет смысл. Начиная с версии 8, VFP стал поддерживать это утверждение стандарта ANSI, а для совместимости осталась опция SET ENGINEBEHAVIOR 70.
Если вам требуется включить в состав запроса поля, по которым не надо делать группировку, а семантически это поля группировки (Например, группировка по ID клиента, а в списке полей выводим и его имя), то применяйте над этими полями "нейтральные" агрегатные функции типа MAX и MIN.
Если в вашем запросе поле tax_id имеет однозначное соответствие с одним из полей группировки (factory_id, region_id, period_id), то можете смело заменить его на MAX(tax_id) AS tax_id или добавить в конец полей группировки (Group BY factory_id, region_id, period_id, tax_id). Если нет, то запрос составлен семантически не правильно и SET ENGINEBEHAVIOR 70 только загоняет проблему в глубь.
С уважением, Алексей
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33253067
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KСогласна стандарта ANSI SQL-92, при использовании GROUP BY... в SELECT... вы можете в списке полей использовать ТОЛЬКО поля с агрегатными функциями и поля, по которым выполняется группировка. Если вы подумаете над этим, то поймете, что только такой вариант имеет смысл.
Чисто согласен.
Aleksey-K...то применяйте над этими полями "нейтральные" агрегатные функции типа MAX и MIN.
Если в вашем запросе поле tax_id имеет однозначное соответствие с одним из полей группировки (factory_id, region_id, period_id), то можете смело заменить его на MAX(tax_id) AS tax_id или добавить в конец полей группировки (Group BY factory_id, region_id, period_id, tax_id). Если нет, то запрос составлен семантически не правильно и SET ENGINEBEHAVIOR 70 только загоняет проблему в глубь.
С уважением, Алексей
Т.е. для canya запрос д.б. выглядеть так:
Код: plaintext
1.
2.
3.
SELECT MAX(tax_id) as tax_id, factory_id, region_id, period_id, MAX(raschet_id) ;
   FROM tax ;
   Group BY factory_id, region_id, period_id ;
   INTO CURSOR Cur_tax1
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33255102
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Владимир!

> SELECT MAX(tax_id) as tax_id, factory_id, region_id, period_id,
> MAX(raschet_id) ;
> FROM tax ;
> Group BY factory_id, region_id, period_id ;
> INTO CURSOR Cur_tax1

ИЛИ

SELECT tax_id, factory_id, region_id, period_id, MAX(raschet_id) ;
FROM tax ;
Group BY tax_id, factory_id, region_id, period_id ;
INTO CURSOR Cur_tax1

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

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33255187
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предыдущий мой совет (см.выше):
>Т.е. для canya запрос д.б. выглядеть так:
>SELECT MAX(tax_id) as tax_id, factory_id, region_id, period_id, MAX(raschet_id) ;
> FROM tax ;
> Group BY factory_id, region_id, period_id ;
> INTO CURSOR Cur_tax1
является неправильным. Подобрал данные, которые показывают неправильность этого запроса.
Igor Korolyov
...
ИЛИ
SELECT tax_id, factory_id, region_id, period_id, MAX(raschet_id) ;
FROM tax ;
Group BY tax_id, factory_id, region_id, period_id ;
INTO CURSOR Cur_tax1
Поскольку автор утверждает что комбинация уникальна, то результат будет
идентичный.
Нет! Здесь будут выбираться все записи из таблицы tax, т.к. tax_id это поле скорее всего уникально для таблицы tax. По крайне мере на моих данных так.
А автору необходимо выбрать записи с MAX(raschet_id) в комбинации 3 полей region_id, period_id, factory_id, но при этом еще знать номер записи таблицы tax (т.е. tax_id). См. выше.
М.б. имеет место другой запрос, но пока автору наверное хватает:
Код: plaintext
1.
2.
3.
4.
SET ENGINEBEHAVIOR  70 
SELECT tax_id, factory_id, region_id, period_id, MAX(raschet_id) ;
   FROM tax ;
   Group BY factory_id, region_id, period_id ;
   INTO CURSOR Cur_tax
Что в моем понимании синтаксис неправильный.
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33255467
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У задачи много решений, например так:

SELECT factory_id, region_id, period_id, MAX(raschet_id) as raschet_id ;
FROM tax ;
GROUP BY factory_id, region_id, period_id ;
INTO CURSOR Cur_tax1

SELECT MAX(t.tax_id) as tax_id,t.factory_id, t.region_id, t.period_id, t.raschet_id ;
FROM tax t, Cur_tax1 ct ;
WHERE t.factory_id = ct.factory_id ;
AND t.region_id = ct.region_id ;
AND t.period_id = ct.period_iс ;
AND t.period_id = сt.period_id
GROUP BY factory_id, region_id, period_id, t.raschet_id ;
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33255536
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi, golsa !
Конечно один из вариантов то что вы написали.
Но как всегда интресен один SELECT.
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33255749
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир САHi, golsa !
Конечно один из вариантов то что вы написали.
Но как всегда интресен один SELECT.
VFP 9.0 поддерживает подзапросы! Кто мешает два запроса запихнуть в один:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT MAX(t.tax_id) as tax_id,t.factory_id, t.region_id, t.period_id, t.raschet_id ;
FROM tax t, (SELECT factory_id, region_id, period_id, MAX(raschet_id) as raschet_id ;
FROM tax ;
GROUP BY factory_id, region_id, period_id ;
INTO CURSOR Cur_tax1
) ct ;
WHERE t.factory_id = ct.factory_id ;
AND t.region_id = ct.region_id ;
AND t.period_id = ct.period_iс ;
AND t.period_id = сt.period_id 
GROUP BY factory_id, region_id, period_id, t.raschet_id
Но лично бы я поменял объединение таблиц через WHERE на JOIN :)
С уважением, Алексей.
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33255756
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только конечно надо убрать в подзапросе
Код: plaintext
...INTO CURSOR Cur_tax1...
С уважением, Алексей.
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33256026
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi, Aleksey-K !
В VFP90 действительно имеет место быть:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT t.tax_id, ct.factory_id, ct.region_id, ct.period_id, ct.raschet_id ;
  FROM tax t, ;
      (SELECT factory_id, region_id, period_id, MAX(raschet_id) as raschet_id ;
         FROM tax ;
         GROUP BY factory_id, region_id, period_id) ct ;
  WHERE t.factory_id = ct.factory_id ;
    AND t.region_id = ct.region_id ;
    AND t.period_id = ct.period_id ;
    AND t.raschet_id = ct.raschet_id ;
  INTO CURSOR Cur_tax
Спасибо. Но для canya видимо это уже неинтересно.
...
Рейтинг: 0 / 0
Почему не работает запрос
    #33260236
canya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем большое спасибо
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Почему не работает запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]