Функция поиска мax/min

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Johny
Местный житель
Сообщения: 291
Зарегистрирован: 29 мар 2005, 17:49
Откуда: С-Петербург
Контактная информация:

Функция поиска мax/min

Сообщение Johny »

Собственно вот и не могу найти никакой функции для поиска max/min элемента столбца таблицы.

Просто хочу придумать что-то для автоматического формирования баркода при импорте МЦ в KATMC.
Да и вообще такая функция не помешала бы.
Желательно чтобы можно было накладывать дополнительные условия. Например выбрать только те МЦ, которые относятся к определенной группе, а там найти максимум.
Думал вот вариант сделать временную таблицу запросом с нужными ограничениями, отсортировать ее, взять последний элемент, а потом грохнуть таблицу. Но че-то как-то не супер красиво .`)

КОроче есть хотя бы простая ф-я поиска таких эл-тов?
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
Deinis
Местный житель
Сообщения: 783
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Функция поиска мax/min

Сообщение Deinis »

Если ты хочешь сделать это LOT-ом, то не получится. Думаю, придется писать свой фейс.
Johny
Местный житель
Сообщения: 291
Зарегистрирован: 29 мар 2005, 17:49
Откуда: С-Петербург
Контактная информация:

Re: Функция поиска мax/min

Сообщение Johny »

Про lot речи не идет. Есть свой фейс для импорта. Там всякие вопросы по пути пользователю задаются, типа выберите файл и тп. Так вот в этом файле хранятся МЦ, для которых надо сформировать новые баркоды, причем чтобы они не дублировались.

Но функция нужна не только для данного случая. Вообще для меня это полезная вещица.
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
IgorA
Постоянный обитатель
Сообщения: 192
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Красноярск

Re: Функция поиска мax/min

Сообщение IgorA »

Непонятно, зачем нужна временная таблица?
Делаем нужный запрос, и встаем на последнюю запись.
И ничего другого здесь не получится. Разве что через ODBC выполнить запрос select max(поле) from .....
Johny
Местный житель
Сообщения: 291
Зарегистрирован: 29 мар 2005, 17:49
Откуда: С-Петербург
Контактная информация:

Re: Функция поиска мax/min

Сообщение Johny »

буду пробовать запросом, хотя пока еще не понял как.
А вот вариант с ODBC интересен. Просто даже не в рамках данной задачи, а просто.
То есть через вип можно обращаться к объектам ODBC? А где это описано?
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
Johny
Местный житель
Сообщения: 291
Зарегистрирован: 29 мар 2005, 17:49
Откуда: С-Петербург
Контактная информация:

Re: Функция поиска мax/min

Сообщение Johny »

Не, чего то с запросом не очень получается, написал вот такую конструкцию:

var
kod : string;
interface getmax;
view as select * from katmc order by barkod;
screen first;
buttons cmBut;
<<
<. Кнопка .>
>>
end;
HandleEvent
cmBut:{
modifier getlast katmc;
kod:=katmc.barkod;
message (kod);
}
end;
end.

Но чего-то он а кажется не оптимальная... Или что имелось ввиду под запросом? Как писать?
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
IgorA
Постоянный обитатель
Сообщения: 192
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Красноярск

Re: Функция поиска мax/min

Сообщение IgorA »

Именно это я и имел ввиду. По другому и быть не может. Даже если и есть, в Атлантисе, какая то ф-ция, то она делает тоже самое.
А про ODBC, я это для примера сказал(дескать есть в нормальном SQL-ле агрегатные ф-ции.)
Johny
Местный житель
Сообщения: 291
Зарегистрирован: 29 мар 2005, 17:49
Откуда: С-Петербург
Контактная информация:

Re: Функция поиска мax/min

Сообщение Johny »

Спасибо, что навел на путь истинный и вселил уверенность в правильности действий :)
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
Priest Geo
Посетитель
Сообщения: 30
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва/Минск
Контактная информация:

Re: Функция поиска мax/min

Сообщение Priest Geo »

Можно просто ввести переменную MaxVal и, если нужно запомнить его позицию, MaxNrec.

if (getfirst SpSopr = tsOk) {
MaxVal := 0;
MaxNrec := 0;
do {
if MaxVal < SpSopr.Kolfact {
MaxVal := SpSopr.Kolfact;
MaxNrec := SpSopr.Nrec }
...
} while (getnext SpSopr = tsOk)
}
Johny
Местный житель
Сообщения: 291
Зарегистрирован: 29 мар 2005, 17:49
Откуда: С-Петербург
Контактная информация:

Re: Функция поиска мax/min

Сообщение Johny »

И то верно. Еще в школе такие штуки изучают :D
То что раньше понаписал горе от ума называется.
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Re: Функция поиска мax/min

Сообщение Max_Fin »

Самое прикольное, что есть у нас книжка такая "Интерактивная среда SQL версия 1.1" от АО "Новый Атлант" НТО "ТОП-СОФТ" от 1994 г. В анотации сказано: "... Для работы необходимо операционная система MS DOS версии 3.3 и старше, BTrieve версии 5.0, 5.10, 5.15, Turbo Pascal версии 7.0 и старше.".
Так вот там есть и MIN и MAX, а так же AVG, SUM.
;D
Жду выхода Вселенная 2.12!
Johny
Местный житель
Сообщения: 291
Зарегистрирован: 29 мар 2005, 17:49
Откуда: С-Петербург
Контактная информация:

Re: Функция поиска мax/min

Сообщение Johny »

Наверное удалили за не надобностью. А то слишком все просто будет.
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
Hass
Сообщения: 6
Зарегистрирован: 29 мар 2005, 17:49

Re: Функция поиска мax/min

Сообщение Hass »

Конкретно для Бар-кода:
BarKodtmp:= MaskMC.kGroupMC + GetLastNumD__(44,MaskMC.kGroupMC,wGetTune('FN.BkLen'));
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Re: Функция поиска мax/min

Сообщение Maverick »

Ребят, не путайте котлеты и отбивные.
Вышеописанные функции - часть агрегатных ф-ий, применяемых в ARD-отчетах с SQL-запросами...
Юзаются только там, так же как и GroupBy.
Неприменимы в обычных конструкциях запросов.
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Ответить