Я обнаружил в MYSQL и, по-видимому, в других механизмах баз данных, что есть «величайшая» функция, которую можно использовать, например: величайшая (1, 2, 3, 4), и она вернет 4. Мне это нужно, но я использую IBM DB2. . Кто-нибудь знает такую эквивалентную функцию, даже если она принимает только 2 параметра?
Я где-то обнаружил, что MAX должен это делать, но он не работает ... он работает только при выборе MAX столбца.
Если такой функции нет, есть ли у кого-нибудь представление о том, как это может выглядеть хранимая процедура? (У меня нет опыта работы с хранимыми процедурами, поэтому я понятия не имею, на что способна DB2).


Два варианта:
Как насчет сортировки столбца по убыванию и захвата первой строки?
Согласно моему «Карманному руководству по SQL», MAX (x) возвращает наибольшее значение в наборе.
ОБНОВЛЕНИЕ: очевидно, № 1 не будет работать, если вы смотрите на столбцы.
Вы не указали это в своем первоначальном запросе.
Я думал, что это подразумевается под «функцией, которую можно использовать как: величайший (1, 2, 3, 4), и она вернет 4» и «она работает только при выборе максимума столбца».
Почему МАКС у вас не работает?
выберите max (1,2,8,3,1,7) из sysibm.sysdummy1
дает мне
1
---------------
8
1 record(s) selected.
Итак, max в db2 является скалярным и агрегатным? интересно.
Странно ... Я получаю "SQL0440N Не было найдено ни одной авторизованной процедуры с именем" MAX "типа" FUNCTION "с совместимыми аргументами. SQLSTATE = 42884", когда я это делаю ....
Как указывает Дейв, MAX должен работать, поскольку он перегружен как скалярная функция, так и функция столбца (скаляр принимает 2 или более аргумента). Так обстоит дело в DB2 для LUW, DB2 для z / OS и DB2 для i5 / OS. Какую точную версию и платформу DB2 вы используете и какой точный оператор вы используете? Одно из требований скалярной версии MAX состоит в том, чтобы все аргументы были «совместимы» - я подозреваю, что в одном или нескольких аргументах, которые вы передаете функции, может быть тонкое различие типов.
В Linux V9.1 "select max (1,2,3) ..." дает -
SQL0440N Нет авторизованной подпрограммы с именем "MAX" типа "FUNCTION", имеющей найдены совместимые аргументы. SQLSTATE = 42884
Это скалярная функция, для которой требуется одно значение или одно имя столбца. На z / os ведет себя иначе.
Однако в Linux 9.5 он работает должным образом.
Звучит безумно, но такой функции в DB2 нет, по крайней мере, в версии 9.1. Если вы хотите выбрать больший из двух столбцов, лучше всего использовать выражение case.
Вы также можете определить свою собственную максимальную функцию. Например:
create function importgenius.max2(x double, y double)
returns double
language sql
contains sql
deterministic
no external action
begin atomic
if y is null or x >= y then return x;
else return y;
end if;
end
Определение входов и выходов как удвоений позволяет вам воспользоваться повышением типа, поэтому эта функция также будет работать для целых чисел. Операторы «детерминированный» и «без внешнего действия» помогают ядру базы данных оптимизировать использование функции.
Если вы хотите, чтобы для ввода символов работала другая функция max, вам придется дать ей другое имя.
Пожалуйста, проверьте следующий запрос:
select * from table1 a,
(select appno as sub_appno,max(sno) as sub_maxsno from table1 group by appno) as tab2
where a.appno =tab2.sub_appno and a.sno=tab2.sub_maxsno
нам нужна скалярная функция, а не функция столбца ... у нас есть 6 разных столбцов, которые мы хотим найти максимум, а не столбец значений