我在MYSQL中发现,显然其他数据库引擎有一个“最大”的功能可以使用:最大(1,2,3,4),它会返回4.我需要这个,但我是使用IBM的DB2。有人知道这样的等效函数,即使它只接受2个参数吗?
我发现MAX应该这样做,但它不起作用......它只适用于选择列的MAX。
如果没有这样的功能,是否有人知道这样做的存储过程可能是什么样的? (我没有存储过程经验,因此我不知道DB2能够做什么)。
答案 0 :(得分:4)
为什么MAX不适合你?
从sysibm.sysdummy1
中选择max(1,2,8,3,1,7)给了我
1
---------------
8
1 record(s) selected.
答案 1 :(得分:4)
正如Dave指出的那样,MAX应该像标量和列函数一样重载(标量需要2个或更多个参数)。 DB2 for LUW,DB2 for z / OS和DB2 for i5 / OS就是这种情况。您使用的是什么样的DB2版本和平台,以及您使用的确切语句是什么? MAX的标量版本的一个要求是所有参数都是“兼容的” - 我怀疑在你传递给函数的一个或多个参数中可能存在细微的类型差异。
答案 2 :(得分:2)
在Linux V9.1上,“select max(1,2,3)...”给出了 -
SQL0440N没有名为“MAX”的授权例程“FUNCTION”类型 找到了兼容的参数。 SQLSTATE = 42884
这是一个标量函数,需要单个值或单个列名。在z / os上,它的行为有所不同。
但是,它在Linux 9.5上按预期工作。
答案 3 :(得分:1)
两个选项:
如何按降序排列列并抓住前1行?
根据我的“SQL Pocket Guide”,MAX(x)返回集合中的最大值。
更新:如果您正在查看列,显然#1将无效。
答案 4 :(得分:1)
听起来很疯狂,但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函数用于字符输入,你必须给它另一个名字。
答案 5 :(得分:0)
请查看以下查询:
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