Sql db2中是否有“最大”的函数?

Sql db2中是否有“最大”的函数?,sql,db2,Sql,Db2,我在MYSQL和其他数据库引擎中发现,有一个最大的函数可以使用,比如:greatest1,2,3,4,它将返回4。我需要这个,但我正在使用IBM的DB2。有人知道这样一个等价函数吗,即使它只接受两个参数 我在某个地方找到了MAX应该做的,但它不起作用。。。它仅适用于选择列的最大值 如果没有这样的函数,有人知道执行此操作的存储过程是什么样子的吗?我没有存储过程的经验,所以我不知道DB2能做什么。有两种选择: 对列进行降序排序并抓住最上面的1行怎么样 根据我的SQLPocket指南,MAXx返回集合

我在MYSQL和其他数据库引擎中发现,有一个最大的函数可以使用,比如:greatest1,2,3,4,它将返回4。我需要这个,但我正在使用IBM的DB2。有人知道这样一个等价函数吗,即使它只接受两个参数

我在某个地方找到了MAX应该做的,但它不起作用。。。它仅适用于选择列的最大值

如果没有这样的函数,有人知道执行此操作的存储过程是什么样子的吗?我没有存储过程的经验,所以我不知道DB2能做什么。

有两种选择:

对列进行降序排序并抓住最上面的1行怎么样

根据我的SQLPocket指南,MAXx返回集合中的最大值


更新:如果您正在查看专栏,显然1不起作用。

为什么MAX不为您工作

从sysibm.sysdummy1中选择max1,2,8,3,1,7

给我

    1
    ---------------
                 8

      1 record(s) selected.

正如Dave指出的,MAX应该作为标量和列函数重载工作。标量接受2个或更多参数。DB2 for LUW、DB2 for z/OS和DB2 for i5/OS就是这种情况。您使用的DB2的确切版本和平台是什么,您使用的确切语句是什么?MAX标量版本的一个要求是所有参数都是兼容的-我怀疑传递给函数的一个或多个参数可能存在细微的类型差异。

在Linux V9.1上,选择MAX 1,2,3。。。给予-

SQL0440N没有名为MAX的已授权例程,函数类型为 找到了兼容的参数。SQLSTATE=42884

它是一个标量函数,需要单个值或单个列名。在z/os上,它的行为不同


但是,它在Linux9.5上确实可以像预期的那样工作。

听起来很疯狂,但DB2中不存在这样的函数,至少在9.1版中不存在。如果要选择两列中较大的一列,最好使用大小写表达式

您还可以定义自己的max函数。例如:

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
将输入和输出定义为double可以利用类型提升,因此此函数也适用于整数。确定性和无外部操作语句有助于数据库引擎优化函数的使用


如果您想让另一个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个不同的列,我们希望找到最大值,而不是一列值。您在原始请求中没有指定这一点。我认为这是由函数暗示的,可以像:greatest1,2,3,4那样使用,它将返回4,并且它只在选择列的最大值时起作用。所以db2中的最大值是标量和聚合的?有趣,奇怪。。。我得到SQL0440N未找到具有兼容参数的函数类型的名为MAX的授权例程。当我这样做时,SQLSTATE=42884。。。。