2008-10-24 49 views
3

我發現在MYSQL和顯然其他數據庫引擎,有一個「最大」的功能,可以使用像:最大(1,2,3,4),它會返回4.我需要這個,但我使用IBM的DB2。有人知道這種等效功能,即使它只接受2個參數嗎?db2中是否有'最大'的功能?

我發現MAX應該這樣做,但它不起作用......它只適用於選擇列的最大值。

如果沒有這樣的功能,有沒有人有一個想法是什麼存儲過程做到這一點可能看起來像? (我沒有存儲過程經驗,所以我不知道DB2能夠做什麼)。

回答

1

兩個選項:

  1. 有關排序按降序列,抓住頂部1排是什麼?

  2. 根據我的「SQL袖珍指南」,MAX(x)返回一個集合中的最大值。

更新:如果您正在查看列,顯然#1將無法正常工作。

+0

我們需要一個標量函數,而不是一列功能......我們有6個不同的欄目,我們希望找到的最大值,不 – 2008-10-24 19:08:33

+0

你沒值的列在原始請求中沒有指定。 – 2008-10-24 19:20:13

+0

我認爲這是暗示的「函數可以使用像:最大(1,2,3,4),它會返回4」和「它只適用於選擇列的最大值。」 – 2008-10-24 20:25:12

4

MAX爲什麼不適合你?

從SYSIBM.SYSDUMMY1

選擇MAX(1,2,8,3,1,7)給了我

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

     1 record(s) selected. 
4

戴維指出,因爲它是超載既是MAX應該工作標量和列函數(標量需要2個或更多參數)。 DB2 for LUW,DB2 for z/OS和DB2 for i5/OS就是這種情況。您使用的是什麼樣的DB2版本和平臺,以及您使用的確切語句是什麼? MAX標量版本的一個要求是所有參數都是「兼容的」 - 我懷疑在傳遞給函數的一個或多個參數中可能存在細微的類型差異。

2

在Linux V9.1,在 「選擇MAX(1,2,3)......」 讓 -

SQL0440N沒有名爲 「MAX」 型 「FUNCTION」 有 兼容參數的授權程序被發現。 SQLSTATE = 42884

它是一個標量函數,需要單個值或單個列名。在z/os上,它的行爲有所不同。

但是,它在Linux 9.5上按預期工作。

1

這聽起來很瘋狂,但DB2中不存在這樣的函數,至少在9.1版本中不存在。如果你想選擇兩列中的較大者,最好使用一個案例表達式。

你也可以定義你自己的最大功能。例如:

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 

定義輸入和輸出雙打可以讓你利用類型提升的,所以這個功能也將努力爲整數。 「確定性」和「無外部操作」語句有助於數據庫引擎優化功能的使用。

如果你想要另一個最大功能爲字符輸入工作,你必須給它另一個名字。

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