:: Visual Foxpro, Foxpro for DOS
максимальное значение всех строк одним запросом
ventall
Автор

Сообщений: 132
Дата регистрации: 29.11.2013
Доброго времени суток! столкнулся казалось бы с легкой задачей. но что то пошло не так)
есть таблица

кол1 кол2 кол3 кол4 кол5
1 2 3 4 5

как селектом выбрать максимальное значение в новую колонку макс_1 этой же таблицы

делаю в командной строке ?max(кол1, кол2, кол3, кол4, кол5) - отображает 5, а в селекте ругается на синтаксис, понимаю что можно выбирать макс 1значение целой 1 колонки. что я делаю не так((



Исправлено 1 раз(а). Последнее : ventall, 03.09.19 21:54
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
ventall
Автор

Сообщений: 132
Дата регистрации: 29.11.2013
сделал курсор readwrite и с помощью replace сделал то что хотел, но все таки есть варианты как сделать по человечески, а не так как я?
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Ты бы свой select показал.
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
"сделай сам, будь мужиком" )
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
ventall
Автор

Сообщений: 132
Дата регистрации: 29.11.2013
select tabl.*, max(tabl.col1, tabl.col2, tabl.col3, tabl.col4) as max_col from tabl into cursor tabl
только так синтаксис не проходит
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
max(списо много полей) - так не умеет движок... Можно подумать почему
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
ventall
Автор

Сообщений: 132
Дата регистрации: 29.11.2013
удалось вот так
select tabl.*, 0.000 as max_col from tabl into cursor tabl readwrite
replace max_col with max(tabl.col1, tabl.col2, tabl.col3, tabl.col4) for tabl.kod >0

всем спасибо за ответы
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> with max(tabl.col1, tabl.col2, tabl.col3, tabl.col4) for tabl.kod >0

Своеобразно... И задача интересная

кол1 кол2 кол3 кол4 кол5
1 2 3 4 5
как селектом выбрать максимальное значение в новую колонку макс_1 этой же таблицы

Это 1й курс института?



Исправлено 1 раз(а). Последнее : of63, 03.09.19 23:06
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
ventall
Автор

Сообщений: 132
Дата регистрации: 29.11.2013
нет, есть продажи и заказы, для которых печатают 4 отчета за 4 периода и на калькуляторе все считают, по максимальному значению и делают заказ. я еще простенькое что то могу, а с таким не сталкивался. решил сделать такой сводный отчет, чтобы все периоды были и предворительный заказ на 1 листе
Ratings: 0 negative/1 positive
Re: максимальное значение всех строк одним запросом
leonid

Сообщений: 3202
Откуда: Рига
Дата регистрации: 03.02.2006
ventall
select tabl.*, max(tabl.col1, tabl.col2, tabl.col3, tabl.col4) as max_col from tabl into cursor tabl
только так синтаксис не проходит

А так?
select tabl.*, max[tabl.col1, tabl.col2, tabl.col3, tabl.col4] as max_col from tabl into cursor tabl
Ratings: 0 negative/1 positive
Re: максимальное значение всех строк одним запросом
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
() Обычно, они хотят видеть инфу "в разных разрезах", типа в в 4-5-6 мериях, надеясь, что это не просто красивые проекции на 2-мерные графики.



Исправлено 1 раз(а). Последнее : of63, 04.09.19 00:18
Ratings: 0 negative/1 positive
Re: максимальное значение всех строк одним запросом
AndyNigmatec

Сообщений: 1552
Откуда: Волгоград
Дата регистрации: 28.06.2015
Как вариант (поскоку это чистый фокс как я понимаю) нарисовать тупо UDF ... ну типа

select tabl.*, fMyMax(tabl.col1, tabl.col2, tabl.col3, tabl.col4) as max_col from tabl into cursor tabl
FUNCTION fMyMax
LPARAMETERS m.p1, m.p2, m.p3, m.p4
LOCAL m.nmax
m.nmax=MAX(m.p1, m.p2, m.p3, m.p4)
RETURN m.nmax
Ratings: 0 negative/1 positive
Re: максимальное значение всех строк одним запросом
ventall
Автор

Сообщений: 132
Дата регистрации: 29.11.2013
select tabl.*, max[tabl.col1, tabl.col2, tabl.col3, tabl.col4] as max_col from tabl into cursor tabl

работает!не знал про квадратные скобки

немного не понимаю обьяснения в хелпе


MAX(eExpression1, eExpression2 [, eExpression3 ...])

тут они есть вконце, ну я подумал что там может просто продолжение полей типа 3, 4, 5, и т. д .
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
Не забудьте про кол5
select tabl.*, max[tabl.col1, tabl.col2, tabl.col3, tabl.col4, tabl.col5] as max_col from tabl into cursor tabl
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
ventall
Автор

Сообщений: 132
Дата регистрации: 29.11.2013
спасибо, не забыл
но вопрос остается, почему max(список много полей) - так не умеет движок, выбирает только 1 строку и то не селектом
[] а так умеет



Исправлено 2 раз(а). Последнее : ventall, 04.09.19 10:05
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
ventall
спасибо, не забыл
но вопрос остается, почему max(список много полей) - так не умеет движок, выбирает только 1 строку и то не селектом
[] а так умеет
Я на часть вопроса могу ответить. Дело в том, что есть две модификации функции MAX.

Первая это функция встроенного языка MAX(eExpression1, eExpression2 [, eExpression3 ...])
А вторая это аггрегатная функция запроса SELECT - SQL.

По-умолчанию, в запросе, SELECT пытается использовать именно вторую (аггрегатную) функцию MAX. А вот ответить, почему квадратные скобки говорят команде SELECT использовать функцию встроенного языка, я не могу. Наверняка есть указание на такое поведение в хелпе, но я лично только на форуме видел упоминание об этом.



Исправлено 1 раз(а). Последнее : pasha_usue, 04.09.19 10:21
Ratings: 0 negative/4 positive
Re: максимальное значение всех строк одним запросом
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
pasha_usue
А вот ответить, почему квадратные скобки говорят команде SELECT использовать функцию встроенного языка, я не могу.
Потому что при вызове встроенных функций можно использовать любые скобки - и круглые, и квадратные - компилятор строит один и тот же код (это касается любого их использования, а не только в SELECT SQL).

А при использовании агрегатных - можно использовать только круглые скобки.

Встречая в команде SELECT SQL круглые скобки у тех функций, которые могут быть как встроенными, так и агрегатными, приоритет отдается последним. Ну, а квадратные скобки "конкурентов" не имеют - они могут использоваться только для встроенных функций.



Исправлено 1 раз(а). Последнее : akvvohinc, 08.09.19 01:06
Ratings: 0 negative/1 positive
Re: максимальное значение всех строк одним запросом
LED

Сообщений: 204
Дата регистрации: 22.07.2006
Интересная тема. Увидел команду
replace
в курсоре
select tabl.*, 0.000 as max_col from tabl into cursor tabl readwrite
replace max_col with max(tabl.col1, tabl.col2, tabl.col3, tabl.col4) for tabl.kod >0

Если есть не документированные понятия, то можно ли сделать так:

select tabl.* from tabl into cursor tabl nofilter readwrite replace max_col with 2 for tabl.kod >0

т.е. записать изменения одновременно при создании курсора.
Не хочется потом применять UPFATE, scan и т.д.



Исправлено 1 раз(а). Последнее : LED, 17.09.19 13:54
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
Мечтать не вредно. В фоксе нет разделителя команд кроме новой строки и потому несколько команд в одной строке невозможны.
А написанную вами гипотетическую строку кода можно заменить вполне реальной. Надо только думать над тем как получить нужный результат выборки, а не как этот результат поменять после его перекидывания в другую таблицу.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: максимальное значение всех строк одним запросом
LED

Сообщений: 204
Дата регистрации: 22.07.2006
Я указал только одну таблицу и действия именно в одной таблице. А насчет мечтать не вредно, это еще понять надо...
Значит нельзя, а жаль... Многое можно было бы решить.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 36 (Гостей: 36)

© 2000-2024 Fox Club 
Яндекс.Метрика