3

我在 MYSQL 和显然其他数据库引擎中发现有一个“最大”的函数,可以像这样使用:最大(1、2、3、4),它会返回 4。我需要这个,但我使用的是 IBM 的 DB2 . 有没有人知道这样的等效函数,即使它只接受 2 个参数?

我在某个地方发现了 MAX 应该这样做,但它不起作用......它只适用于选择列的 MAX。

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

4

6 回答 6

6

为什么 MAX 不适合您?

从 sysibm.sysdummy1 中选择 max(1,2,8,3,1,7)

给我

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

      1 record(s) selected.
于 2008-10-24T19:12:24.487 回答
4

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

于 2008-10-29T16:29:36.020 回答
2

在 Linux V9.1 上,“select max (1,2,3) ...”给出 -

SQL0440N 未找到类型为“FUNCTION”的名为“MAX”且具有兼容参数的授权例程。SQLSTATE=42884

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

但是,它确实在 Linux 9.5 上按预期工作。

于 2008-12-31T14:41:14.433 回答
1

两种选择:

  1. 如何按降序对列进行排序并抓住前 1 行?

  2. 根据我的“SQL 袖珍指南”,MAX(x) 返回一组中的最大值。

更新:如果您正在查看列,显然#1 将不起作用。

于 2008-10-24T19:05:21.273 回答
1

这听起来很疯狂,但在 DB2 中不存在这样的功能,至少在 9.1 版本中不存在。如果要选择两列中的较大者,最好使用 case 表达式。

您还可以定义自己的 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

将输入和输出定义为双精度可以利用类型提升,因此该函数也适用于整数。“确定性”和“无外部操作”语句有助于数据库引擎优化函数的使用。

如果你想让另一个 max 函数用于字符输入,你必须给它另一个名字。

于 2009-03-10T21:31:26.823 回答
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
于 2018-02-07T09:48:04.630 回答